Java 集合系列08之 List總結(LinkedList, ArrayList等使用場景和效能分析)
阿新 • • 發佈:2018-12-18
1 import java.util.*;
2 import java.lang.Class;
3
4 /*
5 * @desc 對比ArrayList和LinkedList的插入、隨機讀取效率、刪除的效率
6 *
7 * @author skywang
8 */
9 public class ListCompareTest {
10
11 private static final int COUNT = 100000;
12
13 private static LinkedList linkedList = new LinkedList();
14 private static ArrayList arrayList = new ArrayList();
15 private static Vector vector = new Vector();
16 private static Stack stack = new Stack();
17
18 public static void main(String[] args) {
19 // 換行符
20 System.out.println();
21 // 插入
22 insertByPosition(stack) ;
23 insertByPosition(vector) ;
24 insertByPosition(linkedList) ;
25 insertByPosition(arrayList) ;
26
27 // 換行符
28 System.out.println();
29 // 隨機讀取
30 readByPosition(stack);
31 readByPosition(vector);
32 readByPosition(linkedList);
33 readByPosition(arrayList);
34
35 // 換行符
36 System.out.println();
37 // 刪除
38 deleteByPosition(stack);
39 deleteByPosition(vector);
40 deleteByPosition(linkedList);
41 deleteByPosition(arrayList);
42 }
43
44 // 獲取list的名稱
45 private static String getListName(List list) {
46 if (list instanceof LinkedList) {
47 return "LinkedList";
48 } else if (list instanceof ArrayList) {
49 return "ArrayList";
50 } else if (list instanceof Stack) {
51 return "Stack";
52 } else if (list instanceof Vector) {
53 return "Vector";
54 } else {
55 return "List";
56 }
57 }
58
59 // 向list的指定位置插入COUNT個元素,並統計時間
60 private static void insertByPosition(List list) {
61 long startTime = System.currentTimeMillis();
62
63 // 向list的位置0插入COUNT個數
64 for (int i=0; i<COUNT; i++)
65 list.add(0, i);
66
67 long endTime = System.currentTimeMillis();
68 long interval = endTime - startTime;
69 System.out.println(getListName(list) + " : insert "+COUNT+" elements into the 1st position use time:" + interval+" ms");
70 }
71
72 // 從list的指定位置刪除COUNT個元素,並統計時間
73 private static void deleteByPosition(List list) {
74 long startTime = System.currentTimeMillis();
75
76 // 刪除list第一個位置元素
77 for (int i=0; i<COUNT; i++)
78 list.remove(0);
79
80 long endTime = System.currentTimeMillis();
81 long interval = endTime - startTime;
82 System.out.println(getListName(list) + " : delete "+COUNT+" elements from the 1st position use time:" + interval+" ms");
83 }
84
85 // 根據position,不斷從list中讀取元素,並統計時間
86 private static void readByPosition(List list) {
87 long startTime = System.currentTimeMillis();
88
89 // 讀取list元素
90 for (int i=0; i<COUNT; i++)
91 list.get(i);
92
93 long endTime = System.currentTimeMillis();
94 long interval = endTime - startTime;
95 System.out.println(getListName(list) + " : read "+COUNT+" elements by position use time:" + interval+" ms");
96 }
97 }