Java學習筆記30,java學習筆記
LinkedList類是List介面的實作類別,它是一個List集合,可以根據索引來隨機訪問集合元素。除此之外,LinkedList還實
現了Deque介面,因此它可以被當成雙端隊列來使用,也可以被當成“棧”來使用。LinkedList是基於鏈的線性表。
以下是官方對LinkedList類的說明:
List 介面的連結清單實現。實現所有可選的列表操作,並且允許所有元素(包括 null)。除了實現 List 介面
外,LinkedList 類還為在列表的開頭及結尾 get、remove 和insert 元素提供了統一的命名方法。這些操作允許將連結
列表用作堆棧、隊列或雙端隊列。
此類實現 Deque 介面,為 add、poll 提供先進先出隊列操作,以及其他堆棧和雙端隊列操作。
所有操作都是按照雙重連結清單的需要執行的。在列表中編索引的操作將從開頭或結尾遍曆列表(從靠近指定索引
的一端)。
注意,此實現不是同步的。如果多個線程同時訪問一個連結清單,而其中至少一個線程從結構上修改了該列表,則
它必須 保持外部同步。(結構修改指添加或刪除一個或多個元素的任何操作;僅設定元素的值不是結構修改。)這
一般通過對自然封裝該列表的對象進行同步操作來完成。如果不存在這樣的對象,則應該使
用Collections.synchronizedList方法來“封裝”該列表。最好在建立時完成這一操作,以防止對列表進行意外的不同步訪
問,如下所示:
List list = Collections.synchronizedList(new LinkedList(...));
此類的 iterator 和listIterator 方法返回的迭代器是快速失敗 的:在迭代器建立之後,如果從結構上對列表進行修改,
除非通過迭代器自身的 remove 或add 方法,其他任何時間任何方式的修改,迭代器都將拋出
ConcurrentModificationException。因此,面對並發的修改,迭代器很快就會完全失敗,而不冒將來不確定的時間任
意發生不確定行為的風險。
注意,迭代器的快速失敗行為不能得到保證,一般來說,存在不同步的並發修改時,不可能作出任何硬性保證。快
速失敗迭代器盡最大努力拋出 ConcurrentModificationException。因此,編寫依賴於此異常的程式的方式是錯誤的,
正確做法是:迭代器的快速失敗行為應該僅用於檢測程式錯誤。
以下是LinkedList類的絕大部分方法:
public class Main {public static void main(String[] args) {LinkedList linkedList=new LinkedList();/* * boolean add(E e) * 將指定元素添加到此列表的結尾。 */linkedList.add("A");//輸出:[A]System.out.println(linkedList);/* * void add(int index, E element) * 在此列表中指定的位置插入指定的元素。 */linkedList.add(1, "B");//輸出:[A, B]System.out.println(linkedList);/* * boolean addAll(Collection<? extends E> c) * 添加指定 collection 中的所有元素到此列表的結尾, * 順序是指定 collection 的迭代器返回這些元素的順序。 */ArrayList arrayList=new ArrayList();arrayList.add("C");arrayList.add("D");linkedList.addAll(arrayList);//輸出:[A, B, C, D]System.out.println(linkedList);/* * boolean addAll(int index, Collection<? extends E> c) * 將指定 collection 中的所有元素從指定位置開始插入此列表。 */ArrayList list=new ArrayList();list.add("E");list.add("F");linkedList.addAll(4, list);//輸出:[A, B, C, D, E, F]System.out.println(linkedList);/* * void addFirst(E e) * 將指定元素插入此列表的開頭。 */linkedList.addFirst("First");//輸出:[First, A, B, C, D, E, F]System.out.println(linkedList);/* * void addLast(E e) * 將指定元素添加到此列表的結尾。 */linkedList.addLast("Last");//輸出:[First, A, B, C, D, E, F, Last]System.out.println(linkedList);/* * Object clone() * 返回此 LinkedList 的淺表副本。 */LinkedList linkedListClone=(LinkedList)linkedList.clone();linkedListClone.add("clone");//輸出:[First, A, B, C, D, E, F, Last, clone]System.out.println(linkedListClone);//輸出:[First, A, B, C, D, E, F, Last]System.out.println(linkedList);/* * boolean contains(Object o) * 如果此列表包含指定元素,則返回 true。 *///輸出:trueSystem.out.println(linkedList.contains("First"));/* * Iterator<E> descendingIterator() * 返回以逆向順序在此雙端隊列的元素上進行迭代的迭代器。 */Iterator iterator=linkedList.descendingIterator();//輸出:Last F E D C B A First while(iterator.hasNext()){System.out.print(iterator.next()+" ");}System.out.println();/* * E element() * 擷取但不移除此列表的頭(第一個元素)。 *///輸出;FirstSystem.out.println(linkedList.element());//輸出:[First, A, B, C, D, E, F, Last]System.out.println(linkedList);/* * E get(int index) * 返回此列表中指定位置處的元素。 *///輸出:ASystem.out.println(linkedList.get(1));/* * E getFirst() * 返回此列表的第一個元素。 *///輸出:FirstSystem.out.println(linkedList.getFirst());/* * E getLast() * 返回此列表的最後一個元素。 *///輸出:LastSystem.out.println(linkedList.getLast());/* * int indexOf(Object o) * 返回此列表中首次出現的指定元素的索引, * 如果此列表中不包含該元素,則返回 -1。 *///輸出:4System.out.println(linkedList.indexOf("D"));/* * int lastIndexOf(Object o) * 返回此列表中最後出現的指定元素的索引, * 如果此列表中不包含該元素,則返回 -1。 *///輸出:6System.out.println(linkedList.lastIndexOf("F"));/* * ListIterator<E> listIterator(int index) * 返回此列表中的元素的列表迭代器(按適當順序), * 從列表中指定位置開始。 */ListIterator listIterator=linkedList.listIterator(3);//輸出:C D E F Last while(listIterator.hasNext()){System.out.print(listIterator.next()+" ");}System.out.println();/* * boolean offer(E e) * 將指定元素添加到此列表的末尾(最後一個元素)。 */linkedList.offer("offer");//輸出:[First, A, B, C, D, E, F, Last, offer]System.out.println(linkedList);/* * boolean offerFirst(E e) * 在此列表的開頭插入指定的元素。 */linkedList.offerFirst("offerFirst");//輸出:[offerFirst, First, A, B, C, D, E, F, Last, offer]System.out.println(linkedList);/* * boolean offerLast(E e) * 在此列表末尾插入指定的元素。 */linkedList.offerLast("offerLast");//輸出:[offerFirst, First, A, B, C, D, E, F, Last, offer, offerLast]System.out.println(linkedList);/* * E peek() * 擷取但不移除此列表的頭(第一個元素)。 *///輸出:offerFirstSystem.out.println(linkedList.peek());//輸出:[offerFirst, First, A, B, C, D, E, F, Last, offer, offerLast]System.out.println(linkedList);/* * E peekFirst() * 擷取但不移除此列表的第一個元素; * 如果此列表為空白,則返回 null。 *///輸出:offerFirstSystem.out.println(linkedList.peekFirst());//輸出:[offerFirst, First, A, B, C, D, E, F, Last, offer, offerLast]System.out.println(linkedList);/* * E peekLast() * 擷取但不移除此列表的最後一個元素;如果此列表為空白, * 則返回 null。 *///輸出:offerLastSystem.out.println(linkedList.peekLast());//輸出:[offerFirst, First, A, B, C, D, E, F, Last, offer, offerLast]System.out.println(linkedList);/* * E poll() * 擷取並移除此列表的頭(第一個元素) *///輸出:offerFirstSystem.out.println(linkedList.poll());//輸出:[First, A, B, C, D, E, F, Last, offer, offerLast]System.out.println(linkedList);/* * E pollFirst() * 擷取並移除此列表的第一個元素;如果此列表為空白, * 則返回 null。 *///輸出:FirstSystem.out.println(linkedList.pollFirst());//輸出:[A, B, C, D, E, F, Last, offer, offerLast]System.out.println(linkedList);/* * E pollLast() * 擷取並移除此列表的最後一個元素;如果此列表為空白, * 則返回 null。 *///輸出:offerLastSystem.out.println(linkedList.pollLast());//輸出:[A, B, C, D, E, F, Last, offer]System.out.println(linkedList);/* * E pop() * 從此列表所表示的堆棧處彈出一個元素。 *///輸出:ASystem.out.println(linkedList.pop());//輸出:[B, C, D, E, F, Last, offer]System.out.println(linkedList);/* * void push(E e) * 將元素推入此列表所表示的堆棧。 */linkedList.push("A");//輸出:[A, B, C, D, E, F, Last, offer]System.out.println(linkedList);/* * E remove() * 擷取並移除此列表的頭(第一個元素)。 *///輸出:ASystem.out.println(linkedList.remove());//輸出:[B, C, D, E, F, Last, offer]System.out.println(linkedList);/* * E remove(int index) * 移除此列表中指定位置處的元素。 *///輸出:offerSystem.out.println(linkedList.remove(6));//輸出:[B, C, D, E, F, Last]System.out.println(linkedList);/* * boolean remove(Object o) * 從此列表中移除首次出現的指定元素(如果存在)。 */linkedList.remove("Last");//輸出:[B, C, D, E, F]System.out.println(linkedList);/* * E removeFirst() * 移除並返回此列表的第一個元素。 *///輸出:BSystem.out.println(linkedList.removeFirst());//輸出:[C, D, E, F]System.out.println(linkedList);/* * boolean removeFirstOccurrence(Object o) * 從此列表中移除第一次出現的指定元素(從頭部到尾部遍曆列表時)。 */linkedList.removeFirstOccurrence("D");//輸出:[C, E, F]System.out.println(linkedList);/* * E removeLast() * 移除並返回此列表的最後一個元素。 *///輸出:FSystem.out.println(linkedList.removeLast());//輸出:[C, E]System.out.println(linkedList);/* * boolean removeLastOccurrence(Object o) * 從此列表中移除最後一次出現的指定元素(從頭部到尾部遍曆列表時)。 */linkedList.removeLastOccurrence("E");//輸出:[C]System.out.println(linkedList);/* * E set(int index, E element) * 將此列表中指定位置的元素替換為指定的元素。 *///輸出:CSystem.out.println(linkedList.set(0, "set"));//輸出:[set]System.out.println(linkedList);/* * int size() * 返回此列表的元素數。 *///輸出:1System.out.println(linkedList.size());/* * Object[] toArray() * 返回以適當順序(從第一個元素到最後一個元素) * 包含此列表中所有元素的數組。 *///輸出:[set]System.out.println(Arrays.toString(linkedList.toArray()));/* * void clear() * 從此列表中移除所有元素。 */linkedList.clear();//輸出:[]System.out.println(linkedList);}}
轉載請註明出處:http://blog.csdn.net/hai_qing_xu_kong/article/details/44134565 情緒控_