public class TestDemo1 {
public static void main(String[] args) {
/**
* ArrayList遍历三种方式
* 1.通过迭代器遍历。即通过Iterator去遍历。
* 2.通过随机访问,通过索引值去遍历。
* 3.通过for循环遍历。
*/
ArrayList list = new ArrayList();
for (int i = 0; i < 1000000; i++) {
list.add(i);
}
/** 问题一:
* 程序读取数据过10亿条的时候会抛出一个问题:java.lang.OutOfMemoryError:Java heap space
* for (long i = 0; i < 1000000000; i++) {
* list.add(i);
* }
*
*如果在测试的时候可能会用Eclispe
*这时候就需要在Eclipse ->run -arguments 中的VM arguments
* 中输入-Xms32m -Xmx800m这个参数就可以了。
*/
/**
* 遍历的三种方式,效率谁更加快。
*/
//使用迭代器方式遍历
iteratorMethod(list);
//随机访问,通过索引值去遍历
randomAccessMethod(list);
//for循环遍历
forMethod(list);
}
/**
* 使用迭代器方式遍历
*/
public static void iteratorMethod(ArrayList list){
long startTime;
long endTime;
Iterator ite = list.iterator();
startTime = System.currentTimeMillis();
while(ite.hasNext()){
ite.next();
}
endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println("开始时间:"+startTime);
System.out.println("结束时间:"+endTime);
System.out.println("使用迭代器方式遍历所需要的时间:"+interval);
}
/**
* 随机访问,通过索引值去遍历
*/
public static void randomAccessMethod(List list){
long startTime;
long endTime;
startTime = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
list.get(i);
}
endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println("随机访问,通过索引值去遍历所需要的时间:"+interval);
}
/**
* for循环遍历
*/
public static void forMethod(List list){
long startTime;
long endTime;
Object obj;
startTime = System.currentTimeMillis();
for (Object objList : list) {
obj = objList;
}
endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println("for循环遍历,所需要的时间:"+interval);
}
} |