java集合框架總結(四)

1、java.util.List

List 接口繼承了 Collection 接口以定義一個容許重複項的有序集合。該接口不但可以對列
表的一部分進行處理,還添加了面向位置的操做。 
 (1) 面向位置的操做包括插入某個元素或 Collection 的功能,還包括獲取、除去或更改元素
的功能。在 List 中搜索元素能夠從列表的頭部或尾部開始,若是找到元素,還將報告元素所
在的位置 : java

  •  void add(int index, Object element): 在指定位置index上添加元素element 
  •  boolean addAll(int index, Collection c): 將集合c的全部元素添加到指定位置index 
  •  Object get(int index): 返回List中指定位置的元素 
  • int indexOf(Object o): 返回第一個出現元素o的位置,不然返回-1 
  • int lastIndexOf(Object o) :返回最後一個出現元素o的位置,不然返回-1 
  •  Object remove(int index) :刪除指定位置上的元素 
  • Object set(int index, Object element) :用元素element取代位置index上的元素,而且返回舊的元素 

 
(2) List 接口不但以位置序列迭代的遍歷整個列表,還能處理集合的子集: 數組

  •  ListIterator listIterator() : 返回一個列表迭代器,用來訪問列表中的元素 
  •  ListIterator listIterator(int index) : 返回一個列表迭代器,用來從指定位置index開 始訪問列表中的元素 
  •  List subList(int fromIndex, int toIndex) :返回從指定位置fromIndex(包含)到toIndex(不包含)範圍中各個元素的列表視圖 ,「對子列表的更改(如 add()、remove() 和 set() 調用)對底層 List 也有影響。」 

 
2、ListIterator接口 

ListIterator 接口繼承 Iterator 接口以支持添加或更改底層集合中的元素,還支持雙向訪
問。ListIterator沒有當前位置,光標位於調用previous和next方法返回的值之間。一個
長度爲n的列表,有n+1個有效索引值: 框架

  •  void add(Object o): 將對象o添加到當前位置的前面 
  • void set(Object o): 用對象o替代next或previous方法訪問的上一個元素。若是上次調用後列表結構被修改了,那麼將拋出IllegalStateException異常。 
  •  boolean hasPrevious(): 判斷向後迭代時是否有元素可訪問 
  • Object previous():返回上一個對象 
  • int nextIndex(): 返回下次調用next方法時將返回的元素的索引 
  • int previousIndex(): 返回下次調用previous方法時將返回的元素的索引 

 「正常狀況下,不用ListIterator改變某次遍歷集合元素的方向 — 向前或者向後。雖然在
技術上能夠實現,但previous() 後馬上調用next(),返回的是同一個元素。把調用 next()
和previous()的順序顛倒一下,結果相同。」 
 dom

咱們還須要稍微再解釋一下 add() 操做。添加一個元素會致使新元素馬上被添加到隱式光
標的前面。所以,添加元素後調用 previous() 會返回新元素,而調用 next() 則不起做用,
返回添加操做以前的下一個元素。」 函數


3、AbstractList和AbstractSequentialList抽象類 

有兩個抽象的 List 實現類:AbstractList 和 AbstractSequentialList。像 AbstractSet 類
同樣,它們覆蓋了 equals() 和 hashCode() 方法以確保兩個相等的集合返回相同的哈希碼。
若兩個列表大小相等且包含順序相同的相同元素,則這兩個列表相等。這裏的 hashCode() 實
如今 List 接口定義中指定,而在這裏實現。 
 
除了equals()和hashCode(),AbstractList和 AbstractSequentialList實現了其他 List 方
法的一部分。由於數據的隨機訪問和順序訪問是分別實現的,使得具體列表實現的建立更爲容
易。須要定義的一套方法取決於您但願支持的行爲。您永遠沒必要親自 提供的是 iterator方
法的實現。 
 測試

4、LinkedList類和ArrayList類 


在「集合框架 」中有兩種常規的 List 實現:ArrayList 和 LinkedList。使用兩種 List 實
現的哪種取決於您特定的須要。若是要支持隨機訪問,而沒必要在除尾部的任何位置插入或除
去元素,那麼,ArrayList 提供了可選的集合。但若是,您要頻繁的從列表的中間位置添加和
除去元素,而只要順序的訪問列表元素,那麼,LinkedList 實現更好。 
 
「ArrayList 和 LinkedList 都實現 Cloneable 接口,都提供了兩個構造函數,一個無參的,
一個接受另外一個Collection」 
 
(1)、LinkedList類 
 
LinkedList類添加了一些處理列表兩端元素的方法。 spa

  • void addFirst(Object o): 將對象o添加到列表的開頭 
  • void addLast(Object o):將對象o添加到列表的結尾 
  • Object getFirst(): 返回列表開頭的元素 
  • Object getLast(): 返回列表結尾的元素 
  •  Object removeFirst(): 刪除而且返回列表開頭的元素 
  • Object removeLast():刪除而且返回列表結尾的元素
  • LinkedList(): 構建一個空的連接列表 
  • LinkedList(Collection c): 構建一個連接列表,而且添加集合c的全部元素 

 
「使用這些新方法,您就能夠輕鬆的把 LinkedList 看成一個堆棧、隊列或其它面向端點的數
據結構。」 
 
(2)、ArrayList類 
 
ArrayList類封裝了一個動態再分配的Object[]數組。每一個ArrayList對象有一個capacity。
這個capacity表示存儲列表中元素的數組的容量。當元素添加到ArrayList時,它的capacity
在常量時間內自動增長。 
 
在向一個ArrayList對象添加大量元素的程序中,可以使用ensureCapacity方法增長capacity。
這能夠減小增長重分配的數量。對象

  • void ensureCapacity(int minCapacity): 將ArrayList對象容量增長minCapacity 
  • void trimToSize(): 整理ArrayList對象容量爲列表當前大小。程序可以使用這個操做減小ArrayList對象存儲空間。 

(3).、RandomAccess接口 
 一個特徵接口。該接口沒有任何方法,不過你可使用該接口來測試某個集合是否支持有效的
隨機訪問。ArrayList和Vector類用於實現該接口繼承

相關文章
相關標籤/搜索