(1)元素新增性能比较
public class Test5 {
public static int ITERATION_NUM = 100000;
public static void main(String[] args) throws InterruptedException {
insertPerformanceCopare();
}
public static void insertPerformanceCopare() throws InterruptedException {
Thread.sleep(5000);
System.out.println("LinkedList新增元素测试开始");
long start = System.nanoTime();
List<Integer> linkedList = new LinkedList<>();
for (int i = 0; i < ITERATION_NUM; i++) {
linkedList.add(i);
}
long end = System.nanoTime();
System.out.println(end-start);
System.out.println("ArrayList新增元素测试开始");
start = System.nanoTime();
List<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < ITERATION_NUM; i++) {
arrayList.add(i);
}
end = System.nanoTime();
System.out.println(end-start);
}
}
随机三次测试结果:
第一次:
LinkedList新增元素测试开始
6716400
ArrayList新增元素测试开始
2602400第二次:
LinkedList新增元素测试开始
8199100
ArrayList新增元素测试开始
2819700第三次:
LinkedList新增元素测试开始
5298600
ArrayList新增元素测试开始
2307800
(2)元素查询性能比较
public class Test6 {
public static int ITERATION_NUM = 100000;
public static void main(String[] args) throws InterruptedException {
getPerformanceCompare();
}
public static void getPerformanceCompare() throws InterruptedException {
Thread.sleep(5000);
List<Integer> arrayList = new ArrayList<>();
for (int i = 0; i <ITERATION_NUM ; i++) {
arrayList.add(i);
}
List<Integer> linkedList = new LinkedList<>();
for (int i = 0; i <ITERATION_NUM ; i++) {
linkedList.add(i);
}
Random random = new Random();
System.out.println("LinkedList获取元素测试开始");
long start = System.nanoTime();
for (int x = 0; x < ITERATION_NUM; x++) {
int j = random.nextInt(x + 1);
int k = linkedList.get(j);
}
long end = System.nanoTime();
System.out.println(end - start);
System.out.println("ArrayList获取元素测试开始");
start = System.nanoTime();
for (int x = 0; x < ITERATION_NUM; x++) {
int j = random.nextInt(x + 1);
int k = arrayList.get(j);
}
end = System.nanoTime();
System.out.println(end - start);
}
}
随机三次测试结果:
第一次:
LinkedList获取元素测试开始
2487867100
ArrayList获取元素测试开始
2743600第二次:
LinkedList获取元素测试开始
2573786900
ArrayList获取元素测试开始
4673500第三次:
LinkedList获取元素测试开始
2526830600
ArrayList获取元素测试开始
4191300
(3)ArrayList和LinkedList存储数据的区别
1.ArrayList底层是数组
LinkedList底层是双向链表
2.ArrayList 的特征:
查询快: 底层是索引,有序的通过内存有序地址,直接找到 时间复杂度 o(1)
增删慢: 增加数据和删除数据有可能扩容。每次扩1.5倍。扩容的话,浪费内存浪费时间o(n)
3.LinkedList的特征:
查询慢:底层是二分法查找的算法 时间复杂度是log以2为底 n的对数
增删快:直接找前置结点 Node prev,后继结点 Node next。时间复杂度是 o(1)
(4)测试结果分析
ArrayList添加元素效率与LinedList速度相差不大,但是查询效率远远优于LinkedList。结论就是开发中不会选择LinkedList处理数据。