Queue 與List、LinkedList與 ArrayList 區別


List 是一個接口,不能實例化,通過實例化ArrayList 或者LinkedList來調用:List list = new ArrayList();

|--List: 元素是有序的(怎么存的就怎么取出來,順序不會亂),元素可以重復(角標1上有個3,角標2上也可以有個3)因為該集合體系有索引,
|-- ArrayList:底層的數據結構使用的是數組結構(數組長度是可變的百分之五十延長)(特點是查詢很快,但增刪較慢)線程不同步
|-- LinkedList:底層的數據結構是鏈表結構(特點是查詢較慢,增刪較快)
|-- Vector:底層是數組數據結構 線程同步(數組長度是可變的百分之百延長)(無論查詢還是增刪都很慢,被ArrayList替代了)

List 接口下的方法有: 

  •       boolean add(int index, E element)  
  •       boolean addAll(index, collection)
  •       boolean remove(int index)
  •       set(int index, E element)   //修改指定角標的元素,返回修改的元素
  •       get( int index) //返回列表中指定位置的元素
  •       subList(int fromIndex, int toIndex) 返回指定范圍間(fromIndex(包括)  toIndex(不包括))的元素

 

Queue接口與List、Set同一級別,都是繼承了Collection接口。

LinkedList實現了Queue接口。Queue接口窄化了對LinkedList的方法的訪問權限(即在方法中的參數類型如果是Queue時,就完全只能訪問Queue接口所定義的方法 了,而不能直接訪問 LinkedList的非Queue的方法),以使得只有恰當的方法才可以使用。

BlockingQueue 繼承了Queue接口。

隊列是一種數據結構.它有兩個基本操作:在隊列尾部加人一個元素,和從隊列頭部移除一個元素就是說,隊列以一種先進先出的方式管理數據,如果你試圖向一個 已經滿了的阻塞隊列中添加一個元素或者是從一個空的阻塞隊列中移除一個元索,將導致線程阻塞.在多線程進行合作時,阻塞隊列是很有用的工具。工作者線程可 以定期地把中間結果存到阻塞隊列中而其他工作者線線程把中間結果取出並在將來修改它們。隊列會自動平衡負載。如果第一個線程集運行得比第二個慢,則第二個 線程集在等待結果時就會阻塞。如果第一個線程集運行得快,那么它將等待第二個線程集趕上來。下表顯示了jdk1.5中的阻塞隊列的操作:

  • add        增加一個元索                     如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常
  • remove   移除並返回隊列頭部的元素    如果隊列為空,則拋出一個NoSuchElementException異常
  • element  返回隊列頭部的元素             如果隊列為空,則拋出一個NoSuchElementException異常
  • offer       添加一個元素並返回true       如果隊列已滿,則返回false
  • poll         移除並返問隊列頭部的元素    如果隊列為空,則返回null
  • peek       返回隊列頭部的元素             如果隊列為空,則返回null
  • put         添加一個元素                      如果隊列滿,則阻塞
  • take        移除並返回隊列頭部的元素     如果隊列為空,則阻塞

  
LinkedList 繼承 List 接口(特有方法):

  •   addFirst();  在頭部添加元素  addLast();在尾部添加元素
  •   getFirst(); getLast();  獲取元素但不刪除
  •   removeFirst(); removeLast();  獲取並且刪除  
  •   jkd1.6中出現了替代方法  
  •   offerFirst(); offerLast();
  •   peekFirst(); peekLast(); 獲取元素,但是元素不被刪除。如果集合中沒有元素,會返回null
  •   pollFirst(); pollLast(); 獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null

ArrayList 繼承 List 接口(特有方法):

  •   Count屬性 記錄當前列表的元素個數
  •   Capacity屬性 記錄能包含的最大數量,可改
  •   Add方法用於添加一個元素到當前列表的末尾
  •   AddRange方法用於添加一批元素到當前列表的末尾
  •   Remove方法用於刪除一個元素,通過元素本身的引用來刪除
  •   RemoveAt方法用於刪除一個元素,通過索引值來刪除
  •   RemoveRange用於刪除一批元素,通過指定開始的索引和刪除的數量來刪除
  •   Insert用於添加一個元素到指定位置,列表后面的元素依次往后移動
  •   InsertRange用於從指定位置開始添加一批元素,列表后面的元素依次往后移動


    另外,還有幾個類似的方法:

  •   Clear方法用於清除現有所有的元素
  •   Contains方法用來查找某個對象在不在列表之中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM