优化以下代码
import java.util.ArrayList;
public class Test {
public static void main(String args[]) {
ArrayList list = new ArrayList<>();
String prefix = "pre";
for (int i = 0; i < 400; i++) {
String s = prefix + i;
list.add(s);
}
System.out.println(list);
}
}
不太清楚出题者的意图? String的问题?貌似是,但是不知道怎么改
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
--------- 后来更新
如果代码是
String s = prefix + i;,那么我下面说的优化方法是错误的,不适用于这种情况。我说的只有在
prefix = prefix + i;的情况下才成立。这段代码的主要问题是
java compiler 会用 StringBuilder 来进行字符串连接,在循环中会有不必要的重复操作。
上面的循环在执行过程中会重复new 400 个 StringBuilder();
要优化的话把
new StringBuilder()提取到局部变量即可。见字节码注释:
优化后代码如下:
1、ArrayList 改为 List,体现继承的地方。
2、优化 String,改为使用 StringBuilder,性能优化。
3、提取局部变量400,使用有意义的变量命名,可读性问题。
优化点应该是减少for循环中产生的对象
仅考虑性能的话 不管怎么变着花的用StringBuilder都不如亲自操作数组来的高效,不过需要手动转换数字
对于这道题来说 循环四百次 用一个长度为6的char数组即可满足要求
对于ArrayList动态扩容也是需要时间的,所以初始化时把长度写申请足了也会起一点作用。。
理论上以下通过以下两处更改可以优化,但我试了下指定初始化list容量,性能反倒降低。很是纳闷,还是请高手解答吧。