1. 程式人生 > >java集合框架--集合介面

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用作特殊的返回值來指示雙端佇列為空