[关闭]
@hengbao 2018-06-04T03:02:18.000000Z 字数 815 阅读 5628

Java:如何最快遍历List

Java


背景:当我们需要遍历List的时候,我们需要视集合大小而选择不同的遍历方法。

1.遍历方式

遍历List主要有三种方式,这里首先列出这三种方式:

1.1 get(i)

  1. int listSize = list.size();
  2. for (int i = 0; i < listSize; i++) {
  3. list.get(i);
  4. }

1.2 foreach

  1. for(String tmp:list)
  2. {
  3. //do something
  4. }

1.3 Iterator

  1. Iterator<String> iter = list.iterator();
  2. while(iter.hasNext())
  3. {
  4. iter.next();
  5. //System.out.println(iter.next());
  6. }

2.根据实测,可以得出下表:

List类型 数据量 遍历方式 理由
ArrayList foreach 编写代码较快
ArrayList ≈1000万 get(i) 效率最高
LinkedList <1000万 Iterator 效率最高
LinkedList >1000万 foreach 效率最高

P.S.:由于ArrayList底层为数组实现,所以在声明ArrayList的时候最好给定一个预测的size的值,使其在添加时尽量少地申请新的空间。在数据量小的情况下,各种方式遍历ArrayList时差异不大,所以可以直接考虑编写代码最方便的foreach。当数据量变大时,还是推荐使用get。但在内存中存储这么庞大的数据,个人建议搭配内存数据库(redis之类)进行操作。对于LinkedList,由于其实现方式就是不利于遍历的,所以在决定使用LinkedList之前,要确定将来进行遍历时,是从前往后或者从后往前,这样的顺序遍历并且不涉及到取某些特定位置的值的操作,否则在数据量猛增时马上就会需要漫长的等待了。

参考:
Java 遍历列表的最快方法
java list三种遍历方法性能比较
Java遍历List四种方法的效率对比

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注