Java LinkedList 集合
LinkedList
繼承自 AbstractSequentialList,實現了 Iterable 、Collection、List 接口。
內部類 ListItr 實現了 ListIterator 接口。
LinkedList 可以使用 Iterator 和 ListIterator 兩種迭代器訪問元素
LinkedList 底層是鏈表結構,可以使用索引直接訪問集合中的元素,調用 get() 和 set() 方法即可。
從 JDK 1.2 版本開始。
ArrayList 集合內元素可以重複。
特點 : 增刪快,改查慢。 LinkedList 是線程不安全的 。
添加元素
示例
LinkedList<Integer> list = new LinkedList<>(); // 將指定元素添加到此列表的結尾 list.add(1); System.out.println("add(E e) :" + list); // 在此列表中指定的位置插入指定的元素 list.add(1, 2); System.out.println("add(int index, E e) :" + list); // 添加一個集合到當前集合的末尾 list.addAll(list); System.out.println("addAll(Collection<? extends E> c) :" + list); // 添加一個集合到當前集合的指定位置 list.addAll(0, list); System.out.println("addAll(int index, Collection<? extends E> c) :" + list); // 添加一個元素到頭部 list.addFirst(3); System.out.println("addFirst(E e) :" + list); // 添加一個元素到尾部 list.addLast(4); System.out.println("addLast(E e) :" + list); // 添加一個元素到末尾 list.offer(5); System.out.println("offer(E e) :" + list); // 添加一個元素到頭部 list.offerFirst(6); System.out.println("offerFirst(E e) :" + list); // 添加一個元素到末尾 list.offerLast(7); System.out.println("offerLast(E e) :" + list);
運行結果
修改元素
示例
LinkedList<Integer> list = new LinkedList<>(); for (int i = 0; i < 10; i++) { list.add(i); } // 用指定元素替換指定位置的元素,返回被替換的元素 Integer ele = list.set(2, 10); System.out.println("(set(int index, E e) :)" + list + ", return:" + ele);
運行結果
獲取元素
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } // 獲得集合中第一個元素,不移除此元素 int ele = list.element(); System.out.println("element() return :" + ele + " , list = " + list); // 獲得集合中指定位置的元素 ele = list.get(5); System.out.println("get(int index) return :" + ele + " , list = " + list); // 獲得集合中第一個元素 ele = list.getFirst(); System.out.println("getFirst() return :" + ele + " , list = " + list); // 獲得集合中最後一個元素 ele = list.getLast(); System.out.println("getLast() return :" + ele + " , list = " + list); // 獲取但不移除此列表的頭(第一個元素) ele = list.peek(); System.out.println("peek() return :" + ele + " , list = " + list); // 獲取但不移除此列表的第一個元素;如果此列表爲空,則返回 null ele = list.peekFirst(); System.out.println("peekFirst() return :" + ele + " , list = " + list); // 獲取但不移除此列表的最後一個元素;如果此列表爲空,則返回 null ele = list.peekLast(); System.out.println("peekLast() return :" + ele + " , list = " + list); // 獲取並移除此列表的頭(第一個元素) ele = list.poll(); System.out.println("poll() return :" + ele + " , list = " + list); // 獲取並移除此列表的第一個元素;如果此列表爲空,則返回 null ele = list.pollFirst(); System.out.println("pollFirst() return :" + ele + " , list = " + list); // 獲取並移除此列表的最後一個元素;如果此列表爲空,則返回 null ele = list.pollLast(); System.out.println("pollLast() return :" + ele + " , list = " + list);
運行結果
移除元素
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加20個元素 for (int i = 0; i < 10; i++) { list.add(i); list.add(i); } // 移除第一個元素,並返回被移除的元素 int ele = list.remove(); System.out.println("remove() :" + list + ", return:" + ele); // 移除指定位置的元素,並返回被移除的元素 ele = list.remove(1); System.out.println("remove(int index) :" + list + ", return:" + ele); // 移除指定元素 (如果它存在,則移除一個) list.remove(Integer.valueOf(5)); System.out.println("remove(Object o) :" + list); // 創建一個新集合,並添加 2 個元素 LinkedList<Integer> newList = new LinkedList<>(); newList.add(7); newList.add(8); // 移除指定集合,(所有交集) list.removeAll(newList); System.out.println("removeAll(Collection<? extends E> c) :" + list); // 移除第一個元素 ele = list.removeFirst(); System.out.println("removeFirst() :" + list + ", return:" + ele); // 移除最後一個元素 ele = list.removeLast(); System.out.println("removeLast() :" + list + ", return:" + ele); // 移除第一次找到的指定元素(從頭部到尾部遍歷) list.removeFirstOccurrence(2); System.out.println("removeFirstOccurrence(Object o) :" + list); // 添加一個 2 到集合的頭部,測試下面的方法 list.addFirst(2); // 移除最後一次找到的指定元素(從頭部到尾部遍歷) list.removeLastOccurrence(2); System.out.println("removeLastOccurrence(Object o) :" + lis
運行結果
其他方法
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } // 獲得集合中元素的個數 int size = list.size(); System.out.println("size() :" + size); // 判斷集合中是否包含指定元素 boolean result = list.contains(5); System.out.println("contains(Object o) :" + result); // 清空集合 list.clear(); System.out.println(list);
運行結果
遍歷元素
for 循環
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } // 遍歷集合 for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + ","); }
運行結果
將集合轉成數組,遍歷數組
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } Integer[] arr = list.toArray(new Integer[list.size()]); // 遍歷數組 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ","); }
運行結果
foreach(增強for)
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } // 增強 for 遍歷 for (int i : list) { System.out.print(i + ","); }
運行結果
迭代器(Iterator)
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } Iterator<Integer> it = list.iterator(); // 遍歷 while (it.hasNext()) { int i = it.next(); System.out.print(i + ","); }
運行結果
迭代器(ListIterator)
示例
LinkedList<Integer> list = new LinkedList<>(); // 爲集合添加10個元素 for (int i = 0; i < 10; i++) { list.add(i); } ListIterator<Integer> li = list.listIterator(); // 遍歷 while (li.hasNext()) { int i = li.next(); System.out.print(i + ","); }
運行結果