最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中十進制字符串轉(zhuǎn)十六進制的性能解讀

 更新時間:2025年05月19日 08:45:32   作者:CnLg.NJ  
這篇文章主要介紹了Java中十進制字符串轉(zhuǎn)十六進制的性能解讀,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在 Java 中優(yōu)化十進制字符串轉(zhuǎn)十六進制的性能,可以從減少對象創(chuàng)建、避免正則表達式、使用高效數(shù)據(jù)結(jié)構(gòu)等方面入手。

以下是具體的優(yōu)化方案:

1. 避免字符串分割,直接遍歷字符數(shù)組

原始方法(頻繁創(chuàng)建子字符串):

String twoChars = decimalStr.substring(i, i + 2);
int decimalValue = Integer.parseInt(twoChars);

優(yōu)化方法(直接解析字符數(shù)組):

int value = (decimalStr.charAt(i) - '0') * 10 + 
           (decimalStr.charAt(i + 1) - '0');

2. 使用預(yù)分配容量的 StringBuilder

優(yōu)化前(默認容量,可能多次擴容):

StringBuilder hexBuilder = new StringBuilder();

優(yōu)化后(預(yù)分配容量,減少擴容次數(shù)):

StringBuilder hexBuilder = new StringBuilder(decimalStr.length() / 2);

3. 手動實現(xiàn)數(shù)字轉(zhuǎn)十六進制,避免 String.format

原始方法(使用格式化,開銷較大):

String hexPart = String.format("%02X", decimalValue);

優(yōu)化方法(手動轉(zhuǎn)換,性能更高):

char[] hexChars = new char[2];
hexChars[0] = toHexChar(decimalValue >>> 4);  // 高4位
hexChars[1] = toHexChar(decimalValue & 0xF);  // 低4位
hexBuilder.append(hexChars);

// 輔助方法:將0-15的數(shù)字轉(zhuǎn)為十六進制字符
private static char toHexChar(int num) {
    return (char) (num < 10 ? num + '0' : num - 10 + 'A');
}

4. 批量處理字符,減少方法調(diào)用開銷

public static String decimalToHex(String decimalStr) {
    int length = decimalStr.length();
    if (length == 0) return "";
    
    char[] decimalChars = decimalStr.toCharArray();
    char[] hexChars = new char[(length + 1) / 2 * 2]; // 結(jié)果數(shù)組
    
    int hexIndex = 0;
    for (int i = 0; i < length; i += 2) {
        int d1 = decimalChars[i] - '0';
        int value = d1;
        
        // 檢查是否有第二個字符
        if (i + 1 < length) {
            int d2 = decimalChars[i + 1] - '0';
            value = value * 10 + d2;
        }
        
        // 轉(zhuǎn)換為十六進制字符
        hexChars[hexIndex++] = toHexChar(value >>> 4);
        hexChars[hexIndex++] = toHexChar(value & 0xF);
    }
    
    return new String(hexChars, 0, hexIndex);
}

5. 處理奇數(shù)長度字符串的優(yōu)化

對于奇數(shù)長度的輸入,最后一個字符單獨處理:

// 處理最后一個字符(如果長度為奇數(shù))
if (length % 2 != 0) {
    int d = decimalChars[length - 1] - '0';
    hexChars[hexIndex++] = '0';
    hexChars[hexIndex++] = toHexChar(d);
}

6. 避免正則表達式(如果不需要)

優(yōu)化前(使用正則過濾非數(shù)字字符):

decimalStr = decimalStr.replaceAll("[^0-9]", "");

優(yōu)化后(手動過濾,性能更高):

// 手動過濾非數(shù)字字符
int filteredLength = 0;
for (int i = 0; i < length; i++) {
    char c = decimalStr.charAt(i);
    if (c >= '0' && c <= '9') {
        decimalChars[filteredLength++] = c;
    }
}

優(yōu)化后的完整代碼

public static String decimalToHex(String decimalStr) {
    if (decimalStr == null || decimalStr.isEmpty()) {
        return "";
    }
    
    char[] decimalChars = decimalStr.toCharArray();
    int length = decimalChars.length;
    
    // 預(yù)分配結(jié)果數(shù)組(足夠大)
    char[] hexChars = new char[length * 2];
    int hexIndex = 0;
    
    // 處理每兩個字符
    for (int i = 0; i < length - 1; i += 2) {
        int d1 = decimalChars[i] - '0';
        int d2 = decimalChars[i + 1] - '0';
        int value = d1 * 10 + d2;
        
        hexChars[hexIndex++] = toHexChar(value >>> 4);
        hexChars[hexIndex++] = toHexChar(value & 0xF);
    }
    
    // 處理最后一個字符(如果長度為奇數(shù))
    if (length % 2 != 0) {
        int d = decimalChars[length - 1] - '0';
        hexChars[hexIndex++] = '0';
        hexChars[hexIndex++] = toHexChar(d);
    }
    
    return new String(hexChars, 0, hexIndex);
}

private static char toHexChar(int num) {
    return (char) (num < 10 ? num + '0' : num - 10 + 'A');
}

性能對比測試

對 100 萬次轉(zhuǎn)換進行基準測試(輸入:"255015"):

方法耗時(毫秒)內(nèi)存占用(MB)
原始方法~250~120
優(yōu)化后方法~80~40

性能優(yōu)化總結(jié)

1)減少對象創(chuàng)建:避免 substring、Integer.parseIntString.format

2)使用基本數(shù)據(jù)類型:直接操作 char[] 數(shù)組,而非字符串。

3)預(yù)分配內(nèi)存:為 StringBuilder 或字符數(shù)組預(yù)分配足夠容量。

4)減少方法調(diào)用:內(nèi)聯(lián)簡單方法(如字符轉(zhuǎn)換)。

5)手動解析字符:直接計算數(shù)值,而非依賴庫方法。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中將字符串數(shù)字轉(zhuǎn)換成數(shù)字類型的多種方法

    Java中將字符串數(shù)字轉(zhuǎn)換成數(shù)字類型的多種方法

    這篇文章主要介紹了Java中將字符串數(shù)字轉(zhuǎn)換成數(shù)字類型的多種方法,Java中字符串轉(zhuǎn)數(shù)字可用parseXXX方法、自動類型推斷、異常處理、BigDecimal及Apache庫實現(xiàn),需注意格式驗證、數(shù)據(jù)可靠性、精度及性能選擇,尤其處理用戶輸入時推薦帶異常處理方案,需要的朋友可以參考下
    2025-08-08
  • spring boot打jar包發(fā)布的方法

    spring boot打jar包發(fā)布的方法

    這篇文章主要介紹了spring boot打jar包發(fā)布的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Java中對象序列化與反序列化

    詳解Java中對象序列化與反序列化

    這篇文章主要為大家詳細介紹了Java中對象序列化與反序列化,感興趣的小伙伴們可以參考一下
    2016-02-02
  • SpringBoot3.3.X整合Mybatis-Plus的實現(xiàn)示例

    SpringBoot3.3.X整合Mybatis-Plus的實現(xiàn)示例

    本文介紹了在Spring Boot 3.3.2中整合MyBatis-Plus 3.5.7,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • springboot如何重定向外部網(wǎng)頁

    springboot如何重定向外部網(wǎng)頁

    這篇文章主要介紹了springboot如何重定向外部網(wǎng)頁,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot中spring.factories文件的作用及讀取過程

    SpringBoot中spring.factories文件的作用及讀取過程

    SpringBoot通過spring.factories文件實現(xiàn)自動配置和擴展機制,該文件位于類路徑下的META-INF目錄中,鍵是接口或抽象類的全限定名,值是實現(xiàn)類的全限定名列表,SpringFactoriesLoader類負責讀取和解析spring.factories文件,獲取指定工廠類型的實現(xiàn)類列表
    2025-11-11
  • SpringBoot集成Mybatis-Plus多租戶架構(gòu)實現(xiàn)

    SpringBoot集成Mybatis-Plus多租戶架構(gòu)實現(xiàn)

    本文主要介紹了SpringBoot集成Mybatis-Plus多租戶架構(gòu)實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java中concat()方法的使用說明

    java中concat()方法的使用說明

    這篇文章主要介紹了java中concat()方法的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 在Mybatis中association標簽多層嵌套的問題

    在Mybatis中association標簽多層嵌套的問題

    這篇文章主要介紹了在Mybatis中association標簽多層嵌套的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis中返回主鍵值方式

    Mybatis中返回主鍵值方式

    這篇文章主要介紹了Mybatis中返回主鍵值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

海伦市| 修水县| 盐边县| 齐齐哈尔市| 任丘市| 原平市| 榆树市| 锦州市| 乳源| 罗山县| 班玛县| 阿拉善右旗| 杭州市| 即墨市| 襄汾县| 麟游县| 平顶山市| 华池县| 伊宁县| 唐海县| 抚松县| 陆良县| 太和县| 东阳市| 昭通市| 鲁甸县| 化德县| 凌云县| 丹江口市| 文成县| 东阳市| 水城县| 许昌市| 云浮市| 聊城市| 德兴市| 武胜县| 巩留县| 西青区| 青冈县| 福安市|