簡體   English   中英

改善方法性能Java

[英]Improving method performance java

更好的解決方案?

   public String toString(byte[] array) {
        if (array == null)
            return "null";

            StringBuilder  sb = new StringBuilder(256).append('[');
            for (int j = 0; j < array.length; ++j) {
                sb.append(array[j]);
                if (j != array.length - 1)
                sb.append(", ");
            }
        return sb.append(']').toString();
    }

更好的解決方案? 如果可能的話,可以使用更快速的解決方案來執行此方法

Arrays.toString()返回指定數組的String表示形式,也許就足夠了:

String s1 = Arrays.toString(byte);

下一行:

sb.append(array[j]);

有點昂貴,因為它涉及將int轉換為字符表示形式,同時跟蹤工作緩沖區等。

替代:

如果您可以得到這樣的結果:

[-123, 123, 002, 000,-022, 127]

代替

[-123, 123, 2, 0, -22, 127]

然后下面的方法在我的機器上快了2到3倍:

    public String toString(byte[] array) {
        final char DIGITS[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        if (array == null) {
            return "null";
        }

        char[] res = new char[(array.length * 5) + 1];

        int abs;
        int pos = 0;
        res[pos++] = '[';
        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                abs = - array[i];
                res[pos++] = '-';
            } else {
                abs = array[i];
                res[pos++] = ' ';
            }
            res[pos++] = (abs >= 100 ? '1' : '0');
            int rest = (abs % 100); 
            res[pos++] = DIGITS[rest / 10]; 
            res[pos++] = DIGITS[rest % 10];
            res[pos++] = ',';
        }
        res[res.length - 1] = ']';

        return new String(res);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM