【发布时间】:2017-03-14 21:59:49
【问题描述】:
我有一个 List 包含 370 个元素,每个元素都是 List <String> 包含 4 个字符串。我正在通过这样做来制作所有数据的一大串:
String veryBigString = "";
for (List <String> s : myList) {
for (String e : s){
veryBigString += e;
}
}
但是,这需要很长时间。有什么办法可以让这个过程更快吗?
编辑:像你们许多人建议的那样使用 StringBuilder,我得到java.lang.OutOfMemoryError。也许我做错了什么:
StringBuilder sb = new StringBuilder();
for (List <String> s : birdsInfoList) {
for (String e : s){
sb.append(e);
}
}
Log.i("Very big String", String.valueOf(sb));
【问题讨论】:
-
理想情况下,完全避免这样做。否则,请使用
StringBuilder。 -
每次你做
veryBigString += e你都是在创建一个新的字符串对象,因为字符串是不可变的。StringBuilder在这里是理想的,因为您不需要每次添加新对象,您只需调用stringBuilder.append( e ) -
提示:尝试在你的外部列表上调用 toString ......这正是你的代码在做什么!
-
@CommonsWare 做到了。您应该使用 StringBuilder。这个解决方案很好地解释了原因:stackoverflow.com/questions/5234147/…
-
@CommonsWare 不是真的,javac 会编译成 StringBuilder