Java學習筆記30,java學習筆記

來源:互聯網
上載者:User

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  情緒控_ 



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.