简易代码如下:
List<Integer> arrayList = new ArrayList<Integer>();
List<Integer> linkedList = new LinkedList<>();
long addArrayTailStart = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
arrayList.add(i);
}
long addArrayTailEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合尾部新增花费时间" + (addArrayTailEnd - addArrayTailStart));
long addLinkedTailStart = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
linkedList.add(i);
}
long addLinkedTailEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合尾部新增花费时间" + (addLinkedTailEnd - addLinkedTailStart));
System.out.println("--------------------------------------------------------");
long addArrayMidleStart = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
arrayList.add(500000+ i, i);
}
long addArrayMidleEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合中间新增花费时间" + (addArrayMidleEnd - addArrayMidleStart));
long addLinkedMidleStart = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
linkedList.add(500000+ i, i);
}
long addLinkedMidleEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合中间新增花费时间" + (addLinkedMidleEnd - addLinkedMidleStart));
System.out.println("--------------------------------------------------------");
long addArrayHeadStart = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
arrayList.add(i, i);
}
long addArrayHeadEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合头部新增花费时间" + (addArrayHeadEnd - addArrayHeadStart));
long addLinkedHeadStart = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
linkedList.add(i, i);
}
long addLinkedHeadEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合头部新增花费时间" + (addLinkedHeadEnd - addLinkedHeadStart));
System.out.println("--------------------开始测删除,此时arrayList大小:"+arrayList.size()+",linkedList大小"+linkedList.size()+"------------------------------------");
long delArrayTailStart = System.currentTimeMillis();
for (int i = 1100999; i >= 1000000; i--) {
arrayList.remove(i);
}
long delArrayTailEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合尾部删除花费时间" + (delArrayTailEnd - delArrayTailStart));
long delLinkedTailStart = System.currentTimeMillis();
for (int i = 1100999; i >= 1000000; i--) {
linkedList.remove(i);
}
long delLinkedTailEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合尾部删除花费时间" + (delLinkedTailEnd - delLinkedTailStart));
System.out.println("--------------------------------------------------------");
long delArrayMidleStart = System.currentTimeMillis();
for (int i = 495000; i < 505000; i++) {
arrayList.remove(i);
}
long delArrayMidleEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合中间删除花费时间" + (delArrayMidleEnd - delArrayMidleStart));
long delLinkedMidleStart = System.currentTimeMillis();
for (int i = 495000; i < 505000; i++) {
linkedList.remove(i);
}
long delLinkedMidleEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合中间删除花费时间" + (delLinkedMidleEnd - delLinkedMidleStart));
System.out.println("--------------------------------------------------------");
long delArrayHeadStart = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
arrayList.remove(i);
}
long delArrayHeadEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合头部删除花费时间" + (delArrayHeadEnd - delArrayHeadStart));
long delLinkedHeadStart = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
linkedList.remove(i);
}
long delLinkedHeadEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合头部删除花费时间" + (delLinkedHeadEnd - delLinkedHeadStart));
System.out.println("--------------------新增删除测试完毕,此时arrayList大小:"+arrayList.size()+",linkedList大小"+linkedList.size()+"------------------------------------");
long updateArrayTailStart = System.currentTimeMillis();
for (int i = 970000; i < 980000; i++) {
arrayList.set(i, i);
}
long updateArrayTailEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合尾部修改花费时间" + (updateArrayTailEnd - updateArrayTailStart));
long updateLinkedTailStart = System.currentTimeMillis();
for (int i = 970000; i < 980000; i++) {
linkedList.set(i, i);
}
long updateLinkedTailEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合尾部修改花费时间" + (updateLinkedTailEnd - updateLinkedTailStart));
System.out.println("--------------------------------------------------------");
long updateArrayMidleStart = System.currentTimeMillis();
for (int i = 485000; i < 495000; i++) {
arrayList.set(i, i);
}
long updateArrayMidleEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合中间修改花费时间" + (updateArrayMidleEnd - updateArrayMidleStart));
long updateLinkedMidleStart = System.currentTimeMillis();
for (int i = 485000; i < 495000; i++) {
linkedList.set(i, i);
}
long updateLinkedMidleEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合中间修改花费时间" + (updateLinkedMidleEnd - updateLinkedMidleStart));
System.out.println("--------------------------------------------------------");
long updateArrayHeadStart = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
arrayList.set(i, i);
}
long updateArrayHeadEnd = System.currentTimeMillis();
System.out.println("arrayList 从集合头部修改花费时间" + (updateArrayHeadEnd - updateArrayHeadStart));
long updateLinkedHeadStart = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
linkedList.set(i, i);
}
long updateLinkedHeadEnd = System.currentTimeMillis();
System.out.println("linkedList 从集合头部修改花费时间" + (updateLinkedHeadEnd - updateLinkedHeadStart));
结果如下:
arrayList 从集合尾部新增花费时间24
linkedList 从集合尾部新增花费时间53
--------------------------------------------------------
arrayList 从集合中间新增花费时间91
linkedList 从集合中间新增花费时间1506
--------------------------------------------------------
arrayList 从集合头部新增花费时间8414
linkedList 从集合头部新增花费时间5654
--------------------开始测删除,此时arrayList大小:1101000,linkedList大小1101000------------------------------------
arrayList 从集合尾部删除花费时间3
linkedList 从集合尾部删除花费时间9
--------------------------------------------------------
arrayList 从集合中间删除花费时间398
linkedList 从集合中间删除花费时间18090
--------------------------------------------------------
arrayList 从集合头部删除花费时间803
linkedList 从集合头部删除花费时间56
--------------------新增删除测试完毕,此时arrayList大小:980000,linkedList大小980000------------------------------------
arrayList 从集合尾部修改花费时间0
linkedList 从集合尾部修改花费时间55
--------------------------------------------------------
arrayList 从集合中间修改花费时间0
linkedList 从集合中间修改花费时间19897
--------------------------------------------------------
arrayList 从集合头部修改花费时间1
linkedList 从集合头部修改花费时间56
由此可见,在新增和删除时,操作头部元素时,linkedList实际性能优于arrayList,在操作中间或尾部元素时,arrayList性能优于linkedList。修改无论操作什么位置的元素,都是arrayList优于linkedList