改进方法性能java

时间:2014-03-17 04:42:48

标签: java performance

更好的解决方案?

   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();
    }

更好的解决方案?如果可能的话,可以使用更快速的解决方案来执行此方法

2 个答案:

答案 0 :(得分:4)

Arrays.toString()返回指定数组的String表示。也许这应该足够了:

String s1 = Arrays.toString(byte);

答案 1 :(得分:0)

以下一行:

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);
    }