有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (2) 个答案

  1. # 1 楼答案

    Arrays.toString()返回指定数组的字符串表示形式。也许这就足够了:

    String s1 = Arrays.toString(byte);
    
  2. # 2 楼答案

    下面一行:

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