ArrayList 踩坑
List<String>temp =new ArrayList();
//获取一批数据
List<String>all =getData();
for(String str :all)
{
temp.add(str);
}
首先大家看看这段代码有什么问题嘛?
其实在大部分情况下这都是没啥问题,无非就是循环的往 ArrayList
中写入数据而已。
但在特殊情况下,比如这里的 getData()
返回数据非常巨大时后续 temp.add(str)
就会有问题了。
比如我们在 review
代码时发现这里返回的数据有时会高达 2000W,这时 ArrayList
写入的问题就凸显出来了。
填坑指南
大家都知道 ArrayList 是由数组实现,而数据的长度有限;需要在合适的时机对数组扩容。
新的长度=原有长度 * 1.5
数据量特别大的时候,多次的扩容会导致效率底下,建议给array一个初始化的长度。这样可以尽量减少扩容。
如果业务场景写的要求大于读的话,可以考虑用LinkedList
LinkedList 的写入效率高于 ArrayList,所以在写大于读的时候非常适用于 LinkedList 。