List 接口繼承了 Collection 接口以定義一個容許重複項的有序集合。該接口不但可以對列
表的一部分進行處理,還添加了面向位置的操做。
(1) 面向位置的操做包括插入某個元素或 Collection 的功能,還包括獲取、除去或更改元素
的功能。在 List 中搜索元素能夠從列表的頭部或尾部開始,若是找到元素,還將報告元素所
在的位置 : java
(2) List 接口不但以位置序列迭代的遍歷整個列表,還能處理集合的子集: 數組
ListIterator 接口繼承 Iterator 接口以支持添加或更改底層集合中的元素,還支持雙向訪
問。ListIterator沒有當前位置,光標位於調用previous和next方法返回的值之間。一個
長度爲n的列表,有n+1個有效索引值: 框架
「正常狀況下,不用ListIterator改變某次遍歷集合元素的方向 — 向前或者向後。雖然在
技術上能夠實現,但previous() 後馬上調用next(),返回的是同一個元素。把調用 next()
和previous()的順序顛倒一下,結果相同。」
dom
咱們還須要稍微再解釋一下 add() 操做。添加一個元素會致使新元素馬上被添加到隱式光
標的前面。所以,添加元素後調用 previous() 會返回新元素,而調用 next() 則不起做用,
返回添加操做以前的下一個元素。」 函數
有兩個抽象的 List 實現類:AbstractList 和 AbstractSequentialList。像 AbstractSet 類
同樣,它們覆蓋了 equals() 和 hashCode() 方法以確保兩個相等的集合返回相同的哈希碼。
若兩個列表大小相等且包含順序相同的相同元素,則這兩個列表相等。這裏的 hashCode() 實
如今 List 接口定義中指定,而在這裏實現。
除了equals()和hashCode(),AbstractList和 AbstractSequentialList實現了其他 List 方
法的一部分。由於數據的隨機訪問和順序訪問是分別實現的,使得具體列表實現的建立更爲容
易。須要定義的一套方法取決於您但願支持的行爲。您永遠沒必要親自 提供的是 iterator方
法的實現。
測試
在「集合框架 」中有兩種常規的 List 實現:ArrayList 和 LinkedList。使用兩種 List 實
現的哪種取決於您特定的須要。若是要支持隨機訪問,而沒必要在除尾部的任何位置插入或除
去元素,那麼,ArrayList 提供了可選的集合。但若是,您要頻繁的從列表的中間位置添加和
除去元素,而只要順序的訪問列表元素,那麼,LinkedList 實現更好。
「ArrayList 和 LinkedList 都實現 Cloneable 接口,都提供了兩個構造函數,一個無參的,
一個接受另外一個Collection」
(1)、LinkedList類
LinkedList類添加了一些處理列表兩端元素的方法。 spa
「使用這些新方法,您就能夠輕鬆的把 LinkedList 看成一個堆棧、隊列或其它面向端點的數
據結構。」
(2)、ArrayList類
ArrayList類封裝了一個動態再分配的Object[]數組。每一個ArrayList對象有一個capacity。
這個capacity表示存儲列表中元素的數組的容量。當元素添加到ArrayList時,它的capacity
在常量時間內自動增長。
在向一個ArrayList對象添加大量元素的程序中,可以使用ensureCapacity方法增長capacity。
這能夠減小增長重分配的數量。對象
(3).、RandomAccess接口
一個特徵接口。該接口沒有任何方法,不過你可使用該接口來測試某個集合是否支持有效的
隨機訪問。ArrayList和Vector類用於實現該接口繼承