一、定義 ArrayList和LinkedList是兩個集合類,用於儲存一系列的對象引用(references)。 引用的格式分別為: 1 ArrayList<String> list = new ArrayList<String>(); 1 LinkedList<Integer> list = n ...
一、定義
ArrayList和LinkedList是兩個集合類,用於儲存一系列的對象引用(references)。
引用的格式分別為:
1 ArrayList<String> list = new ArrayList<String>();
1 LinkedList<Integer> list = new LinkedList<Integer>();
二、ArrayList與LinkedList的大致區別
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構;
2.對於隨機訪問get和set,ArrayList優先於LinkedList。因為LinkedList要移動指針。
3.對於新增和刪除操作(add和remove),LinkedList比較占優勢,因為ArrayList要移動數據。
(關於3,網上又爭論,意思是說對大型數據的增刪,收尾增刪或對中間某位作用,效果是不同的,有待考證!)
三、ArrayList與LinkedList常用方法
代碼實例:
1 import java.util.ArrayList; 2 3 public class CollT2 { 4 5 public static void main(String[] args) { 6 7 // 新建一個ArrayList 8 ArrayList<String> list = new ArrayList<String>(); 9 System.out.println("初始化大小:" + list.size()); 10 11 // 添加元素 12 list.add("北京"); 13 list.add("天津"); 14 list.add("上海"); 15 list.add("廣州"); 16 list.add("深圳"); 17 list.add("海口"); 18 list.add("廈門"); 19 System.out.println("當前容量:" + list.size()); 20 21 // 講ArrayList的大小和實際所含元素的大小設置一致 22 // 註意:此操作演示下麵會拋出的異常:java.util.ConcurrentModificationException 23 list.trimToSize(); 24 25 // 遍歷 26 for (String string : list) { 27 System.out.println(string); 28 29 // 在指定位置插入元素 30 list.add(2, "黑龍江"); 31 for (String string1 : list) { 32 System.out.println(string1); 33 } 34 System.out.println("=======分割線========"); 35 36 // 清空list 37 list.clear(); 38 for (String string3 : list) { 39 System.out.println(string3); 40 } 41 42 } 43 } 44 }
1 import java.util.LinkedList; 2 3 //ArrayList基於數組實現,所以它具備數組的特點,即查詢速度較快,但是修改、插入的速度卻有點兒慢。 4 //下麵將要介紹的LinkedList就是來解決這個問題的,LinkedList基於鏈表,與ArrayList互補。 5 //所以實際開發中我們應該按照自己的需求來定到底用哪一個。 6 7 //LinkedList底層採用雙向迴圈列表實現,進行插入和刪除操作時具有較高的速度. 8 //我們還可以使用LinkedList來實現隊列和棧 9 10 public class CollT3 { 11 @SuppressWarnings("null") 12 public static void main(String[] args) { 13 14 // 創建一個list 15 LinkedList<Integer> list = new LinkedList<Integer>(); 16 LinkedList<Integer> list2 = new LinkedList<Integer>(); 17 LinkedList<Integer> list3 = new LinkedList<Integer>(); 18 LinkedList<Integer> list4 = new LinkedList<Integer>(); 19 20 System.out.println(list.size()); 21 22 // 添加元素 23 // list.add("鍋包肉");沒考慮數據類型 24 // list.add("溜肉段"); 25 System.out.println("====分割線1===="); 26 27 list.add(5); 28 list.add(6); 29 list.add(7); 30 list.add(8); 31 list.add(9); 32 list.add(10); 33 34 list2.add(-1); 35 list2.add(-2); 36 list2.add(-3); 37 list2.add(-4); 38 list2.add(-5); 39 40 list3.add(111); 41 list3.add(222); 42 list3.add(333); 43 list3.add(444); 44 list3.add(555); 45 46 list4=null; 47 48 System.out.println(list.size()); 49 50 // 遍歷 51 for (Integer a : list) { 52 System.out.println(a); 53 } 54 55 list.add(4, 11111); 56 System.out.println(list);// 竟然是橫著列印出來的 57 System.out.println("===分割線2===="); 58 59 list.add(3, 22222); 60 System.out.println(list);// 二次驗證竟然是橫著列印出來的 61 62 System.out.println("===分割線3===="); 63 System.out.println(list.addAll(list2)); 64 System.out.println(list); 65 66 System.out.println("===分割線4===="); 67 // 錯誤:System.out.println(2,list.addAll(list3)); 68 list.addAll(2, list3);// 將指定 collection 中的所有元素從指定位置開始插入此列表。 69 System.out.println(list); 70 71 System.out.println("===分割線5===="); 72 list3.addFirst(3);//需要單獨列印 73 System.out.println(list3); 74 75 System.out.println("===分割線6===="); 76 list3.addLast(0000000001);//1 77 list3.addLast(000000000);//0 78 list3.addLast(0);//0 79 //list3.addLast(00000000000000009);//The literal 00000000000000009 of type int is out of range 80 list3.addLast(0000000000000000000000000000000000007);//末尾只能寫到7,8和9不行 81 System.out.println(list3); 82 83 list.clear(); 84 System.out.println(list);//[] 85 86 System.out.println("===分割線7===="); 87 88 list2.clone();//返回此 LinkedList的淺表副本。 89 System.out.println(list); 90 91 System.out.println("===分割線8===="); 92 //list3.contains(999999999);//呃,竟然不是這麼驗證的!!!! 93 System.out.println(list3.contains(999999999));// 如果此列表包含指定元素,則返回 true。 94 95 System.out.println("===分割線9===="); 96 //list3.element();//呃,竟然不是這麼驗證的!!!! 97 System.out.println(list3.element());//獲取但不移除此列表的頭(第一個元素)。 98 System.out.println(list3);//驗證上面的操作真的只是獲取沒有移除 99 100 System.out.println("===分割線10====");//註意上面對list3的操作,給它頭位添加個3了 101 System.out.println(list3.get(2));// 返回此列表中指定位置處的元素。 102 103 System.out.println("===分割線11===="); 104 System.out.println(list3.getFirst());//返回此列表的第一個元素。 105 System.out.println(list3.getLast());//返回此列表的最後一個元素。 106 107 System.out.println("===分割線12===="); 108 System.out.println(list3.indexOf(333));//返回此列表中首次出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。 109 System.out.println(list3.indexOf(10)); 110 111 System.out.println("===分割線13===="); 112 list3.add(333); 113 list3.add(333); 114 list3.add(333); 115 System.out.println(list3); 116 System.out.println(list3.lastIndexOf(0));//返回此列表中最後出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。 117 System.out.println(list3.lastIndexOf(9));//-1 118 119 System.out.println("===分割線14===="); 120 list3.offer(6);//將指定元素添加到此列表的末尾(最後一個元素)。 121 System.out.println(list3.offer(6));//true 122 System.out.println(list3); 123 124 System.out.println("===分割線15===="); 125 System.out.println(list3.peek());// 獲取但不移除此列表的頭(第一個元素)。 126 127 //peekFirst();獲取但不移除此列表的最後一個元素;如果此列表為空,則返回 null。 128 //System.out.println(list4.peekFirst());上面list4定義為null,黃色報錯。用了@SuppressWarnings("null")。驗證:java.lang.NullPointerException 129 //System.out.println(list4.peekLast());java.lang.NullPointerException 130 131 System.out.println("===分割線16===="); 132 System.out.println(list3); 133 list3.poll(); 134 System.out.println(list3); 135 136 System.out.println("===分割線17===="); 137 System.out.println(list3); 138 list3.toArray();//返回以適當順序(從第一個元素到最後一個元素)包含此列表中所有元素的數組。 139 System.out.println(list3); 140 } 141 142 }
列印結果:
0 ====分割線1==== 6 5 6 7 8 9 10 [5, 6, 7, 8, 11111, 9, 10] ===分割線2==== [5, 6, 7, 22222, 8, 11111, 9, 10] ===分割線3==== true [5, 6, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5] ===分割線4==== [5, 6, 111, 222, 333, 444, 555, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5] ===分割線5==== [3, 111, 222, 333, 444, 555] ===分割線6==== [3, 111, 222, 333, 444, 555, 1, 0, 0, 7] [] ===分割線7==== [] ===分割線8==== false ===分割線9==== 3 [3, 111, 222, 333, 444, 555, 1, 0, 0, 7] ===分割線10==== 222 ===分割線11==== 3 7 ===分割線12==== 3 -1 ===分割線13==== [3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333] 8 -1 ===分割線14==== true [3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6] ===分割線15==== 3 ===分割線16==== [3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6] [111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6] ===分割線17==== [111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6] [111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]