java集合框架--集合介面
java 集合框架使程式處理集合陣列的方法標準化。集合框架包含了一組標準的介面。對這些介面,提供了幾個標準的實現工具(LinkedList、HashSet 和 TreeSet);
集合介面:
介面 | 描述 |
---|---|
Collection | 集合框架的頂層介面,定義了操作物件集合的共同方法 |
List | 繼承 Collection,表示有序的,可包括重複元素的列表 |
Set | 繼承 Collection,表示無序的,無重複元素的列表 |
SortSet | 繼承 Set,對Set中元素進行排序 |
Queue | 繼承 Collection,定義了佇列資料結構的操作方式 |
Deque | 繼承了Queue,定義了雙向佇列資料結構的操作方式 |
集合介面類圖如下:
Collection 介面
Collection 介面是構造集合框架的基礎。它宣告所有類集合都將擁有的核心方法。因為所有類集合實現 Collection,所以熟悉它的方法對於清楚地理解框架是必要的。
注意:其中幾個方法可能會引發一個 UnsupportedOperationException 異常,這些發生在當類集合不能被修改時。當一個物件與另一個物件不相容,例如,當企圖增加一個不相容的物件到一個集合中時,將產生一個ClassCastException異常。
Collection 定義的方法:
方法 | 描述 |
---|---|
boolean add (Object obj) | 將 obj加入到呼叫類集合中。如果Obj被加入到類集合中了,則返回 true,如果未能加入集合,則返回 false。 |
booleand addAll(Collection c) | 將 c 中的所有元素都加入到類集合中,如果操作成功,則返回 true, 否則返回 false。 |
void clear() | 從呼叫類集合中刪除所有元素 |
boolean contains(Object obj) | 如果 obj 是呼叫類集合中的一個元素,則返回 true,否則返回 false。 |
boolean containsAll(Collection c) | 如果呼叫類集合包含了 c 中的所有元素,則返回 true,否則返回 false。 |
boolean equals(Object obj) | 如果呼叫類集合與 obj相等,則返回 true,否則返回 false |
int hashCode() | 返回呼叫類集合的雜湊值 |
boolean isEmpty() | 如果呼叫類集合時空的,則返回true,否則返回 false。 |
Iterator iterator() | 返回呼叫類集合的迭代器 |
boolean remove(Object obj) | 從呼叫類集合中刪除 obj 的一個例項。如果這個元素被刪除了,則返回 true,否則返回 false |
boolean removeAll(Collection c) | 從呼叫類集合中刪除 c 的的所有元素。如果類集合被改變了(也就是說元素被刪除了),則返回 true,否則返回 false |
boolean retainAll(Collection c) | 刪除呼叫類集合中除了包含在 c 中的元素之外的所有元素。如果類集合被改變了(也就是說元素被刪除了),則返回 true,否則返回 false |
int size() | 返回呼叫類集合中元素的個數 |
Object[] toArray() | 返回一個數組,該陣列包含了所有儲存在呼叫類集合中的元素 |
Object[] toArray(Object array[]) | 返回一個數組,該陣列僅僅包含了那些型別與陣列元素型別匹配的類集合元素。如果 array的大小與匹配元素的個數相等,則它們被返回到 array,如果 array 的大小比匹配元素的個數小,則將分配並返回一個所需大小的新陣列;如果 array 的大小比匹配元素的個數大,在陣列中,在類集合元素之後的單元被置為 null。如果任 一類集合元素的型別都不是 array 的子型別,則引發一個 ArrayStoreException異常 |
List介面
List介面繼承了 Collection 並聲明瞭類集的新特性。使用一個基於 零 的下標,元素可以通過他們在列表中的位置被插入和訪問。一個列表可以包含重複元素。
處理 由 Collection 定義的方法之外,List 還定義了一些它自己的方法。注意:當類集合不能被修改時,其中的幾種方法引發 UnsupportOperationException 異常當一個物件與另一個物件不相容,例如,當企圖增加一個不相容的物件到一個類集中時,將產生一個ClassCastException異常。
List 定義的方法:
方法 | 描述 |
---|---|
void add(int index, Object obj) | 將 obj 加入到呼叫列表中。插入位置的下標由 index 傳遞。任何已存在的,在插入點以及插入點之後的元素將後移。因此,沒有元素被覆蓋 |
booleand addAll(int index, Collection c) | 將 c 中的所有元素插入到呼叫列表中。插入位置的下標由 index 傳遞。任何已存在的,在插入點以及插入點之後的元素將後移。因此,沒有元素被覆蓋。如果呼叫列表改變了,則返回 true, 否則返回 false。 |
Object get(int index) | 返回儲存在呼叫類集內指定下標處的物件 |
int indexOf(Object obj) | 返回呼叫列表中 obj 的第一個例項的下標。如果 obj 不是列表中的元素,則返回 -1 |
int lastIndexOf(Object obj) | 返回呼叫列表中 obj 的最後一個例項的下標。如果 obj 不是列表中的元素,則返回 -1 |
ListIterator listIterator() | 返回呼叫列表的迭代器 |
ListIterator listIterator(int index) | 返回呼叫列表從指定下標處開始的迭代器 |
Object remove(int index) | 刪除呼叫列表中 index 位置的元素並返回刪除的元素。刪除後,列表被壓縮。也就是說,被刪除元素後面的元素向前移動 |
Object set(int index, Object obj) | 用 obj對呼叫列表內由 index 指定的位置進行賦值 |
List subList(int start, int end) | 返回一個列表,該列表包括了呼叫列表中從 start 到 end - 1 的元素 |
Set 和 sortSet 介面
set 介面定義了一個集合,它繼承了 collection 並說明了不允許重複元素的類集的特性。因此,如果試圖將仇富元素加到集合時, add() 方法將返回 false,它本身並沒有定義任何附件的方法。
SortSet 介面繼承了 Set 並說明了按升序排列的集合的特性。當沒有元素包含在呼叫集合中時,其中的幾種方法引發 NoSuchElementException 異常。當物件與集合中的元素不相容時,引發 ClassCastException 異常。如果試圖使用 null 物件,而集合不允許 null 時,將引發 NullPointerException 異常。
SortedSet定義的方法:
方法 | 描述 |
---|---|
Comparator comparator() | 返回排序集合的比較器,如果對該集合使用自然排序,則返回 null |
Object first() | 返回排序集合的第一個元素 |
SortSet headSet(Object end) | 返回一個包含那些小於 end 的元素的 SortedSet |
Object last() | 返回排序集合的最後一個元素 |
SortSet subSet(Object start, Object end) | 返回一個 SortedSet,它包括了 從 start 到 end-1 的元素 |
SortSet tailSet(Object start) | 返回一個 SortedSet, 它包含了那些包含在類集合中的大於 等於 start 的元素 |
Queue 和 Deque 介面
Queue< E >介面(E表示集合元素的型別)擴充套件了 Collection 介面、定義了一個佇列資料結構的操作方式。佇列定義了一個 “頭” 位置, 它是下一個將要被移除的元素。除了從 Collection 繼承的操作外,還提供了 插入,提取和檢查操作。每個方法都存在兩種形式。一種 丟擲異常(操作失敗時),另一種返回一個特殊值(null 或 false ,具體取決於操作)。插入操作的一種形式是用於專門為有容量限制的 Queue 實現設計的;在大多數實現中,插入操作不會失敗。
Queue定義的方法:
方法 | 描述 |
---|---|
boolean add(E e) | 將指定的元素插入此佇列(如果立即可行且不會違反容量限制),在成功時返回 true, 如果當前沒有可用的空間,則丟擲 IllegalStateException |
boolean offer(E e) | 將指定的元素插入此佇列(如果立即可行且不會違反容量限制)當使用有容量顯得佇列時,此方法通常要優於 add(E),或者可能無法插入元素,而只是丟擲一個異常 |
E remove() | 獲取並移除此佇列的頭,如果此佇列為空,則丟擲一個異常 |
E poll() | 獲取並移除此佇列的頭,如果此佇列為空,則返回 null |
E element() | 獲取,但是不移除此佇列的頭,此佇列為空時,將丟擲一個異常 |
E peek() | 獲取,但是不移除此佇列的頭,此佇列為空時,則返回 null |
remove() 和 poll() 方法可移除 和返回佇列的頭。到底從佇列中移除哪個元素是佇列排序策略的功能,而該策略在各種實現中是不同的。 remove() 和 poll() 方法僅在佇列為空時其行為有所不同,remove() 方法丟擲一個異常,而 poll () 方法則返回 null。
element () 和 peek() 返回但不移除佇列的頭。
Queue 介面並未定義阻塞佇列的方法,而這種情況在併發程式設計中是很常見的。
BlockingQueue 介面定義了那些等待元素出現或等待佇列中有可用空間的方法,這些方法擴充套件了此介面。
Queue 實現通常不允許插入null元素。儘管某些實現(如 LinkedList)並不禁止插入null.即使 在允許 null 的實現中,也不應該將 null 插入到 Queue 中。因為 null 也用做 poll 方法的一個特殊返回值,表明佇列不包含元素。
Deque 定義了一個雙端佇列資料結構,支援在兩端插入和移除元素。大多數Deque 實現對於他們能夠包含的元素數有沒固定的限制,但此介面即支援有容量限制的雙端佇列,也支援沒有固定大小限制的雙端佇列。
此介面定義在雙端佇列兩端訪問元素的方法,提供插入,移除,和檢查元素的方法。每種方法都存在兩種形式:一種形式在操作失敗時丟擲異常,另一種形式返回一個特殊值 (null 或是 false,具體取決於操作)。插入操作的後一種形式是轉為使用容量限制的Deque實現設計的;在大多數實現中,插入操作不能失敗。
Deque 定義的方法
Tables | Are | Cool |
---|---|---|
col 3 is | right-aligned | $1600 |
此介面擴充套件了 Queue 介面。在將雙端佇列用作佇列時,將得到 FIFO (現金先出)行為。
將原始新增到雙端佇列的末尾,從雙端佇列的開頭移除元素。
從Queue 介面繼承的方法完全等效於 Deque 方法。
雙端佇列也可用作 LIFO(後進先出)堆疊。應優先使用此介面而不是遺留 Stack l類。在將雙端佇列用作堆疊時,元素被推入雙端佇列的開頭並從雙端佇列開頭彈出。堆疊方法完全等效於Deque 方法。
雖然 Deque 實現沒有嚴格要求禁止插入 null 元素,但 建議最好不要插入 null 元素。建議任何事實上允許 null 元素的 Deque 實現,使用者最好不要利用插入 null 的功能。這是因為各種方法會將null用作特殊的返回值來指示雙端佇列為空