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 是由数组实现,而数据的长度有限;需要在合适的时机对数组扩容。
这里以插入到尾部为例 add(E e)。
ArrayList<String> temp = new ArrayList<>(2) ;
temp.add("1");
temp.add("2");