for和iterator的区别
- 1.ArrayList用for循环获取100000个数据需要:2
- 2.ArrayList用iterator循环获取100000个数据需要:4
- 3.LinkedList用for循环获取100000个数据需要:4564
- 4.LinkedList用iterator循环获取100000个数据需要:3
- 5.LinkedList用foreach循环获取100000个数据需要:3
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
LinkedList<Integer> linkedList = new LinkedList<>();
int size = 100000;
for (int i = 0; i < size; i++){
arrayList.add(i);
linkedList.add(i);
}
long preTime = System.currentTimeMillis();
for (int i = 0; i < size; i++){
arrayList.get(i);
}
System.out.println("ArrayList用for循环获取"+size+"个数据需要:" + (System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
Iterator<Integer> iterator = arrayList.iterator();
while (iterator.hasNext()){
iterator.next();
}
System.out.println("ArrayList用iterator循环获取"+size+"个数据需要:" + (System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
for (int i = 0; i < size; i++){
linkedList.get(i);
}
System.out.println("LinkedList用for循环获取"+size+"个数据需要:" + (System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
Iterator<Integer> iterator1 = linkedList.iterator();
while (iterator1.hasNext()){
iterator1.next();
}
System.out.println("LinkedList用iterator循环获取"+size+"个数据需要:" + (System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
for (Integer integer : linkedList){
}
System.out.println("LinkedList用foreach循环获取"+size+"个数据需要:" + (System.currentTimeMillis() - preTime));
}
}
结论:
- 1.Array的for和iterator区别不大
- 2.foreach底层应该是用iterator实现的
- 3.LinkedList用foreach和iterator的速度远大于用for
ArrayList和ArrayList增加元素和移除元素的区别:
- 1.ArrayList增加100000次元素需要消耗的时间:10
- 2.ArrayList移除100000次头部元素需要消耗的时间:457
- 3.ArrayList移除100000次尾部元素需要消耗的时间:386
- 4.LinkedList增加100000次元素需要消耗的时间:6
- 5.LinkedList移除100000次头部元素需要消耗的时间:12
- 6.LinkedList移除100000次尾部元素需要消耗的时间:5
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
LinkedList<Integer> linkedList = new LinkedList<>();
long preTime;
int size = 100000;
preTime = System.currentTimeMillis();
for (int i = 0; i < size; i++){
arrayList.add(i);
}
System.out.println("ArrayList增加"+size+"次元素需要消耗的时间:"+(System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
ArrayList<Integer> cpArrayList = new ArrayList<>(arrayList);
for (int i = 0; i < size; i++){
cpArrayList.remove(0);
}
System.out.println("ArrayList移除"+size+"次头部元素需要消耗的时间:"+(System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
cpArrayList = new ArrayList<>(arrayList);
for (int i = size - 1; i >= 0; i--){
cpArrayList.remove(0);
}
System.out.println("ArrayList移除"+size+"次尾部元素需要消耗的时间:"+(System.currentTimeMillis() - preTime));
//-----------------------------------------------
preTime = System.currentTimeMillis();
for (int i = 0; i < size; i++){
linkedList.add(i);
}
System.out.println("LinkedList增加"+size+"次元素需要消耗的时间:"+(System.currentTimeMillis() - preTime));
for (int i = 0; i < size; i++){
linkedList.get(i);
}
preTime = System.currentTimeMillis();
LinkedList<Integer> cpLinkedList = new LinkedList<>(linkedList);
for (int i = 0; i < size; i++){
cpLinkedList.remove(0);
}
System.out.println("LinkedList移除"+size+"次头部元素需要消耗的时间:"+(System.currentTimeMillis() - preTime));
preTime = System.currentTimeMillis();
cpLinkedList = new LinkedList<>(linkedList);
for (int i = size - 1; i >= 0; i--){
cpLinkedList.remove(0);
}
System.out.println("LinkedList移除"+size+"次尾部元素需要消耗的时间:"+(System.currentTimeMillis() - preTime));
}
}
总体LinkedList快于ArrayList
- 再对比for-and-iterator篇测评
- 1.LinkedList按平时获取元素来算的化确实比ArrayList慢get(int index),但根据iterator来对比的化其实也差不多快。
- 2.LinkedList其他操作(增加,删除)似乎都比ArrayList快.