Java基礎——ArrayList與LinkedList(一),arraylistlinkedlist
一、定義
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.ConcurrentModificationException23 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 // 清空list37 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));//-1118 119 System.out.println("===分割線14====");120 list3.offer(6);//將指定元素添加到此列表的末尾(最後一個元素)。121 System.out.println(list3.offer(6));//true122 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.NullPointerException129 //System.out.println(list4.peekLast());java.lang.NullPointerException130 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====65678910[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====37===分割線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]