@hengbao
2018-06-04T03:02:18.000000Z
字数 815
阅读 5628
Java
背景:当我们需要遍历List的时候,我们需要视集合大小而选择不同的遍历方法。
遍历List主要有三种方式,这里首先列出这三种方式:
int listSize = list.size();
for (int i = 0; i < listSize; i++) {
list.get(i);
}
for(String tmp:list)
{
//do something
}
Iterator<String> iter = list.iterator();
while(iter.hasNext())
{
iter.next();
//System.out.println(iter.next());
}
List类型 | 数据量 | 遍历方式 | 理由 |
---|---|---|---|
ArrayList | 少 | foreach | 编写代码较快 |
ArrayList | ≈1000万 | get(i) | 效率最高 |
LinkedList | <1000万 | Iterator | 效率最高 |
LinkedList | >1000万 | foreach | 效率最高 |
P.S.:由于ArrayList底层为数组实现,所以在声明ArrayList的时候最好给定一个预测的size的值,使其在添加时尽量少地申请新的空间。在数据量小的情况下,各种方式遍历ArrayList时差异不大,所以可以直接考虑编写代码最方便的foreach。当数据量变大时,还是推荐使用get。但在内存中存储这么庞大的数据,个人建议搭配内存数据库(redis之类)进行操作。对于LinkedList,由于其实现方式就是不利于遍历的,所以在决定使用LinkedList之前,要确定将来进行遍历时,是从前往后或者从后往前,这样的顺序遍历并且不涉及到取某些特定位置的值的操作,否则在数据量猛增时马上就会需要漫长的等待了。