1,通过源码角度分析Arraylist和 linkedlist的性能如下:
| Add() | Remove(int i) | Set(int i, E e) | Get(int i) |
Arraylist | O(1)-O(N) | O(N) | O(1) | O(1) |
Linkedlist | O(1) | O(N) | O(N) | O(N) |
2,这篇文章主要是通过用例测试来了解Arraylist和linkedlist的性能。代码如下:
package JavaTest.List.Testone;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* @author weibinbin
*
*/
public class ListCompareTest {
private static final int COUNT = 100000;
private static LinkedList linkedList = new LinkedList();
private static ArrayList arrayList = new ArrayList();
public static void main(String[] args) {
// 换行符
System.out.println();
// 插入
insert(linkedList);
insert(arrayList);
// 换行符
System.out.println();
// 修改
setByPosition(linkedList);
setByPosition(arrayList);
// 换行符
System.out.println();
// 随机读取
readByPosition(linkedList);
readByPosition(arrayList);
//换行符
System.out.println();
// 删除
deleteByPosition(linkedList);
deleteByPosition(arrayList);
}
// 获取list的名称
private static String getListName(List list) {
if (list instanceof LinkedList) {
return "LinkedList";
} else if (list instanceof ArrayList) {
return "ArrayList";
} else {
return "List";
}
}
// 向list的指定位置插入COUNT个元素,并统计时间
private static void insert(List list) {
long startTime = System.currentTimeMillis();
// 向list的位置0插入COUNT个数
for (int i = 0; i < COUNT; i++)
list.add(i);
long endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println(getListName(list) + " : insert " + COUNT
+ " elements into the 1st position use time:" + interval
+ " ms");
}
// 根据position,不断从list中读取元素,并统计时间
private static void setByPosition(List list) {
long startTime = System.currentTimeMillis();
// 读取list元素
for (int i = 0; i < COUNT; i++)
list.set(i, 0);
long endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println(getListName(list) + " : set" + COUNT
+ " elements by position use time:" + interval + " ms");
}
// 从list的指定位置删除COUNT个元素,并统计时间
private static void deleteByPosition(List list) {
long startTime = System.currentTimeMillis();
// 删除list第一个位置元素
for (int i = 0; i<COUNT; i++)
list.remove(0);
long endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println(getListName(list) + " : delete " + COUNT
+ " elements from the 1st position use time:" + interval
+ " ms");
}
// 根据position,不断从list中读取元素,并统计时间
private static void readByPosition(List list) {
long startTime = System.currentTimeMillis();
// 读取list元素
for (int i = 0; i < COUNT; i++)
list.get(i);
long endTime = System.currentTimeMillis();
long interval = endTime - startTime;
System.out.println(getListName(list) + " : read " + COUNT
+ " elements by position use time:" + interval + " ms");
}
}
3,实验的数据结果如下:
| Add() | Remove(int i) | Set(int i, E e) | Get(int i) |
Arraylist | 16ms | 1149ms | 1ms | 4ms |
Linkedlist | 15ms | 0ms | 6511ms | 6542ms |