List在日常编码中经常出现,记得从开始学Java时取List数据时就要求使用Iterator接口获取,听说是这样比较快.今天突然心血来潮想到测试下到底哪个方法更快,到底快多少.结果使用get方法取得的数据时间要比Iterator少很多.附测试代码供解答:package com.ccesun.client;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class IteratorTest { /**
* @param args
*/
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(1000);
for(int i = 0; i < 1000; i++){
list.add(i);
}
for(int i = 0; i < 10;){
System.out.println("Test case:"+(++i));
test(list);
}
} private static void test(List<Integer> list) {
Integer tmp = 0;
Iterator<Integer> its = null;
long st = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
its = list.iterator();
for(int j = 0; j < list.size(); j++){
tmp = its.next();
}
}
long it = System.currentTimeMillis()-st;
for(int i = 0; i < 10000; i++){
for(int j = 0; j < list.size(); j++){
tmp = list.get(j);
}
}
long gt = System.currentTimeMillis()-st-it;
System.out.println("Iterator cost time:"+it);
System.out.println("Get cost time:"+gt);
}}测试结果:Test case:1
Iterator cost time:297
Get cost time:171
Test case:2
Iterator cost time:297
Get cost time:172
Test case:3
Iterator cost time:250
Get cost time:172
Test case:4
Iterator cost time:250
Get cost time:172
Test case:5
Iterator cost time:250
Get cost time:172
Test case:6
Iterator cost time:234
Get cost time:188
Test case:7
Iterator cost time:234
Get cost time:188
Test case:8
Iterator cost time:234
Get cost time:172
Test case:9
Iterator cost time:250
Get cost time:172
Test case:10
Iterator cost time:250
Get cost time:172
import java.util.Iterator;
import java.util.List;public class IteratorTest { /**
* @param args
*/
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(1000);
for(int i = 0; i < 1000; i++){
list.add(i);
}
for(int i = 0; i < 10;){
System.out.println("Test case:"+(++i));
test(list);
}
} private static void test(List<Integer> list) {
Integer tmp = 0;
Iterator<Integer> its = null;
long st = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
its = list.iterator();
for(int j = 0; j < list.size(); j++){
tmp = its.next();
}
}
long it = System.currentTimeMillis()-st;
for(int i = 0; i < 10000; i++){
for(int j = 0; j < list.size(); j++){
tmp = list.get(j);
}
}
long gt = System.currentTimeMillis()-st-it;
System.out.println("Iterator cost time:"+it);
System.out.println("Get cost time:"+gt);
}}测试结果:Test case:1
Iterator cost time:297
Get cost time:171
Test case:2
Iterator cost time:297
Get cost time:172
Test case:3
Iterator cost time:250
Get cost time:172
Test case:4
Iterator cost time:250
Get cost time:172
Test case:5
Iterator cost time:250
Get cost time:172
Test case:6
Iterator cost time:234
Get cost time:188
Test case:7
Iterator cost time:234
Get cost time:188
Test case:8
Iterator cost time:234
Get cost time:172
Test case:9
Iterator cost time:250
Get cost time:172
Test case:10
Iterator cost time:250
Get cost time:172
当然,这个比较中get肯定更快。因为iterator.next()调用的还是get(i),并执行i++,而iterator在此基础上,还有更大的开销。比如ArrayList的iterator每次next都是在try-catch中的,还要检查是否有调用过remove,速度当然会慢。
list里放点是int基本数据类型,如果放到是对象,会不会结果不一样呢?