6 回答
TA贡献1828条经验 获得超6个赞
优化后代码如下:
import java.util.List;
import java.util.ArrayList;
public class Test {
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
StringBuilder prefix = new StringBuilder("pre");
int max = 400;
for (int i = 0; i < max; i++) {
int beforeAppLen = prefix.length();
prefix.append(i);
list.add(prefix.toString());
prefix.delete(beforeAppLen, prefix.length());
}
System.out.println(list);
}
}
1、ArrayList 改为 List,体现继承的地方。
2、优化 String,改为使用 StringBuilder,性能优化。
3、提取局部变量400,使用有意义的变量命名,可读性问题。
TA贡献1811条经验 获得超5个赞
import java.util.ArrayList;
public class Test {
public static void main(String args[]) {
for (int i = 0; i < 400; i++) {
System.out.println(prefix + i);
}
}
}
TA贡献1816条经验 获得超4个赞
ArrayList<String> list = new ArrayList<>(400);
char[] chars = new char[]{'p','r','e','\0','\0','\0'};
for (int i = 0; i < 10; i++) {
chars[3] = (char) (i + 48);
list.add(new String(chars, 0, 4));
}
for (int i = 10; i < 100; i++) {
chars[4] = (char) ((i % 10) + 48);
chars[3] = (char) ((i / 10) + 48);
list.add(new String(chars, 0, 5));
}
for (int i = 100; i < 400; i++) {
chars[5] = (char) ((i % 10) + 48);
chars[4] = (char) (((i / 10) % 10) + 48);
chars[3] = (char) ((i / 100) + 48);
list.add(new String(chars, 0, 6));
}
System.out.println(list);
仅考虑性能的话 不管怎么变着花的用StringBuilder都不如亲自操作数组来的高效,不过需要手动转换数字
对于这道题来说 循环四百次 用一个长度为6的char数组即可满足要求
对于ArrayList动态扩容也是需要时间的,所以初始化时把长度写申请足了也会起一点作用。。
TA贡献1821条经验 获得超4个赞
理论上以下通过以下两处更改可以优化,但我试了下指定初始化list容量,性能反倒降低。很是纳闷,还是请高手解答吧。
import java.util.ArrayList;
public class Test {
public static void main(String args[]) {
List<String> list = new ArrayList<String>(400);
final String prefix = "pre";
for (int i = 0; i < 400; i++) {
String s = prefix + i;
list.add(s);
}
System.out.println(list);
}
}
添加回答
举报