昨儿晚上宿舍讨论到迭代器的问题,今天有时间我就写了个小东西看了看两者的效率差别。发现效率差的还真大。
先上代码。代码很简单。
主程序测试类:TestArrayList.java
package com.test.arrayList; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TestArrayList { private static final int COUNT = 700000; private static List<Person> persons = new ArrayList<Person>(); public static void main(String args[]) { init(); System.out.println("For遍历测试:" + testFor() + "微秒"); System.out.println("迭代器遍历测试:" + testIterator() + "微秒"); System.out.println("有人很喜欢的foreach测试:" + testForEach() + "微秒"); } public static void init() { Person person = null; for (int i = 0; i < COUNT; i++) { person = new Person("第" + i + "个", i, i * 100); persons.add(person); } } public static long testIterator() { long start = System.nanoTime(); Person person = null; for (Iterator<Person> it = persons.iterator(); it.hasNext();) { person = it.next(); } return (System.nanoTime() - start) / (1000); } public static long testFor() { long start = System.nanoTime(); Person person = null; for (int i = 0; i < persons.size(); i++) { person = persons.get(i); } return (System.nanoTime() - start) / (1000); } public static long testForEach() { long start = System.nanoTime(); Person person = null; for (Person p : persons) { person = p; } return (System.nanoTime() - start) / (1000); } }
实体Person类。放到容器里面的。
Person.java
package com.test.arrayList; public class Person { private String name; private int age; private double money; public Person(String name, int age, double money) { this.name = name; this.age = age; this.money = money; } getter(); setter(); }
开始测试:
结果附上图:
看到差别了吧。上面的测试是万级别的测试。一般效率影响不大。
要多说的是foreach效率和迭代器效率差不多。