做leetcode上的reverse words一题,使用字符串加法进行字符串拼接时,超时。
后改为使用StringBuilder拼接字符串,通过。
代码如下:
效率分析:
后改为使用StringBuilder拼接字符串,通过。
代码如下:
public String reverseWords(String s) {
String[] arr = s.trim().split(" ");
StringBuilder builder = new StringBuilder();
for(int i = arr.length-1;i>=0;i--){
//主要时间瓶颈在下面,故使用StringBuilder
if(!arr[i].equals("")){
builder.append(arr[i]);
if(i > 0){
builder.append(' ');
}
}
}
return builder.toString();
}
效率分析:
- JDK对String的解释,意思是:String是常量,一旦创建后它的值不能被修改。
- 如果使用如:String str1 = "abc";创建的String对象在常量池中(栈);如果使用如:String str2 = new String("abc");创建的对象在堆中。
- 常量池中的对象可以使用==比较,堆中的对象不可使用==比较。==比较的是地址。
- 对字符串的加法,编辑器会自动引入StringBuilder的append()与toString()。
- 两种拼接字符串的方法在大循环中的时间效率可相差百倍级别。这是实测得到的结果。
关于效率分析,参考:http://www.cr173.com/html/18555_1.html