Java集合框架總結——List接口的使用2

 

3、LinkedList實現類

    List還有一個LinkedList的實現,它是一個基於鏈表實現的List類,對於順序訪問集合中的元素進行了優化,特別是當插入、刪除元素時速度非常快。因爲LinkedList即實現了List接口,也實現了Deque接口(雙向隊列),Deque接口是Queue接口的子接口,它代表一個雙向列表,Deque接口裏定義了一些可以雙向操作隊列的方法

  • void addFirst(Object e):將制定元素插入該雙向隊列的開頭。
  • void addLast(Object e):將制定元素插入該雙向隊列的末尾。
  • Iterator descendingIterator():返回以該雙向隊列對應的迭代器,該迭代器將以逆向順序來迭代隊列中的元素。
  • Object getFirst():獲取、但不刪除雙向隊列的第一個元素。
  • Object getLast(): 獲取、但不刪除雙向隊列的最後一個元素。
  • boolean offerFirst(Object e): 將指定的元素插入該雙向隊列的開頭。
  • boolean offerLast(Object e): 將指定的元素插入該雙向隊列的末尾。
  • Object peekFirst(): 獲取、但不刪除該雙向隊列的第一個元素:如果此雙端隊列爲空,則返回null。
  • Object peekLast():獲取、但不刪除該雙向隊列的最後一個元素:如果此雙端隊列爲空,則返回null。
  • Object pollFirst():獲取、並刪除該雙向隊列的第一個元素:如果此雙端隊列爲空,則返回null。
  • Object pollLast():獲取、並刪除該雙向隊列的最後一個元素:如果此雙端隊列爲空,則返回null。
  • Object pop():pop出該雙向隊列所表示的棧中第一個元素。
  • void push(Object e):將一個元素push進該雙向隊列所表示的棧中(即該雙向隊列的頭部)。
  • Object removerFirst():獲取、並刪除該雙向隊列的最後一個元素。
  • Object removeFirstOccurrence(Object o):刪除該雙向隊列的第一次的出現元素o。
  • Object removeLast():獲取、並刪除該雙向隊列的最後一個元素。
  • Object removeLastOccurrence(Object o):刪除該雙向隊列的最後一次出現的元素o。

從上面方法中可以看出,LinkedList不僅可以當成雙向隊列使用,也可以當成“棧”使用。同時,LinkedList實現了List接口,所以還被當成List使用。

程序示例:

複製代碼
public class TestLinkedList {     public static void main(String[] args)     {         LinkedList books = new LinkedList();         //將字符串元素加入隊列的尾部         books.offer("Struts2權威指南");         //將一個字符串元素入棧         books.push("輕量級J2EE企業應用實戰");         //將字符串元素添加到隊列的頭部         books.offerFirst("ROR敏捷開發最佳實踐");         for (int i = 0; i < books.size() ; i++ )         {             System.out.println(books.get(i));         }         //訪問、並不刪除隊列的第一個元素         System.out.println(books.peekFirst());         //訪問、並不刪除隊列的最後一個元素         System.out.println(books.peekLast());         //採用出棧的方式將第一個元素pop出隊列         System.out.println(books.pop());         //下面輸出將看到隊列中第一個元素被刪除         System.out.println(books);         //訪問、並刪除隊列的最後一個元素         System.out.println(books.pollLast());         //下面輸出將看到隊列中只剩下中間一個元素:輕量級J2EE企業應用實戰         System.out.println(books);      } }
複製代碼

程序運行結果:

ROR敏捷開發最佳實踐 
輕量級J2EE企業應用實戰 
Struts2權威指南 
ROR敏捷開發最佳實踐 
Struts2權威指南 
ROR敏捷開發最佳實踐 
[輕量級J2EE企業應用實戰, Struts2權威指南] 
Struts2權威指南 
[輕量級J2EE企業應用實戰]

說明:程序中示範了LinkedList作爲雙向隊列、棧和List集合的用法。LinkedList與ArrayList、Vector的實現機制完全不同,ArrayList、Vector內部以數組的形式來保存集合中的元素,因此隨機訪問集合元素上有較好的性能;而LinkedList內部以鏈表的形式來保存集合中的元素,因此隨機訪問集合時性能較差,但在插入、刪除元素時性能非常出色(只需改變指針所指的地址即可)。Vector因實現了線程同步功能,所以各方面性能有所下降。

 

關於使用List集合的幾點建議:

  • 如果需要遍歷List集合元素,對應ArrayList、Vector集合,則應該使用隨機訪問方法(get)來遍歷集合元素,這樣性能更好。對應LinkedList集合,則應採用迭代器(Iterator)來遍歷集合元素。
  • 如果需要經常執行插入、刪除操作來改變Lst集合大小,則應該使用LinkedList集合,而不是ArrayList。
  • 如果多條線程需要同時訪問List集合中的元素,可以考慮使用Vector這個同步實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章