java可能增强AbstractStringBuilder的性能
我正在使用Java StringBuilder进行测试,特别是在AbstractStringBuilder类中实现的replace(int,int,String)函数,如下所示:
public AbstractStringBuilder replace(int start, int end, String str) {
if (start < 0)
throw new StringIndexOutOfBoundsException(start);
if (start > count)
throw new StringIndexOutOfBoundsException("start > length()");
if (start > end)
throw new StringIndexOutOfBoundsException("start > end");
if (end > count)
end = count;
int len = str.length();
int newCount = count + len - (end - start);
if (newCount > value.length)
expandCapacity(newCount);
System.arraycopy(value, end, value, start + len, count - end);
str.getChars(value, start);
count = newCount;
return this;
}
Arraycopy函数调用会“移动”值字符数组的部分内容,以便为以后注入的str内容(str.getChars(value,start))留出空间。在我看来,只有在str长度与字符数组中要覆盖的空间不匹配的情况下,才应该执行此arraycopy
很明显的一个是非常< EME>绝望地考虑这是一个性能问题,尽管在StrugBuudor替换类中用更大的字符数组(和gt;500 k字符)和数组复制导致了可测量的性能改进。p>
在Windows 32位平台上使用java 6对同一个StringBuilder实例进行了测试,测试了大约一百万次替换调用
# 1 楼答案
我会通过它作为一个要求加强
差不多
进一步的增强是更改阵列副本
}