List 一共有四种for循环stackoverflow,如下,四种循环的简单的性能测试方法见下面代码,简单的得到结论,使用最常用的for循环效率是最高的。
结果:
forEachTest:48687724
iteratorTest:44456424
iterator2Test:45406589
normalTest:7648871
程序清单
class TraverseList {
private static long stratTime = 0L;
private static long endTime = 0L;
public static void iteratorTest(List<String> list) {
stratTime = System.nanoTime();
Iterator<String> it = list.iterator();
while (it.hasNext()) {
it.next();
}
endTime = System.nanoTime();
System.out.println("iteratorTest:" + (endTime - stratTime));
}
public static void forEachTest(List<String> list) {
stratTime = System.nanoTime();
for (String tmp : list) {
}
endTime = System.nanoTime();
System.out.println("forEachTest:" + (endTime - stratTime));
}
public static void normalTest(List<String> list) {
stratTime = System.nanoTime();
for (int i = 0; i < list.size(); i++) {
}
endTime = System.nanoTime();
System.out.println("normalTest:" + (endTime - stratTime));
}
public static void iterator2Test(List<String> list) {
stratTime = System.nanoTime();
for (Iterator<String> it = list.iterator(); it.hasNext();) {
it.next();
}
endTime = System.nanoTime();
System.out.println("iterator2Test:" + (endTime - stratTime));
}
};
public class ListTest {
public static void main(String[] args) {
// testStringUtils();
int i = 1000000;
List<String> list = new ArrayList<String>(1000000);
while (i-- > 0) {
list.add("test" + i);
}
TraverseList.forEachTest(list);
TraverseList.iteratorTest(list);
TraverseList.iterator2Test(list);
TraverseList.normalTest(list);
}
}
其他关于四种方式的使用规则。
1、如果需要删除list里面的数据,那么请使用iterator,使用id.remove();
2、forEach 对于数组,不能方便的访问下标值;对于集合,与使用Interator相比,不能方便的删除集合中的内容.除了简单遍历并读取其中的内容外,不建议使用增强的for循环,考虑到性能问题,也不建议使用,但是如果是遍历的一个比较小的集合,那么可以考虑使用,可以精简代码。foreach里头的的 temp变量只是一个局部变量,而且还是集合中元素的一个副本,并不是元素本身。因此容易引起写实效。例子如下:
public static void testForEachWriterInvalid() {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
for (Integer tmp : list) {
if (tmp == 1) {
tmp = tmp * 2;
}
}
for (Integer tmp : list) {
System.out.println(tmp );
}
}
3、未完待续…