StringBuffer s = new StringBuffer(45); s.append("Testing String"); s.append(" "); s.append("Concatenation Performance"); String s3 = s.toString(); 再考虑下面这个例子:
String s = ""; int sum = 0; for(int I=1; I<10; I++) { sum += I; s = s + "+" +I ; } s = s + "=" + sum; 分析一下为何前面的代码比下面的代码效率低:
StringBuffer sb = new StringBuffer(); int sum = 0; for(int I=1; I<10; I++){ sum + = I; sb.append(I).append("+"); } String s = sb.append("=").append(sum).toString(); 原因就在于每个s = s + "+" + I操作都要创建并拆除一个StringBuffer对象以及一个String对象。这完全是一种浪费,而在第二个例子中我们避免了这种情况。
String s = "Hello"; int i = v.indexOf(s); if(I != -1) v.remove(s); 这些代码看起来没什么错误,但它同样对性能不利。在这段代码中,indexOf()方法对v进行顺序搜索寻找字符串“Hello”,remove(s)方法也要进行同样的顺序搜索。改进之后的版本是:
String s = "Hello"; int i = v.indexOf(s); if(I != -1) v.remove(i); 这个版本中我们直接在remove()方法中给出待删除元素的精确索引位置,从而避免了第二次搜索。一个更好的版本是:
String s = "Hello"; v.remove(s); 最后,我们再来看一个有关Vector类的代码片段: