“嗨,阿米戈!”

“嗨,艾莉!”

“今天我們要徹底了解集合的結構。”

“我已經等了很久了。”

“你已經知道什麼是集合,也知道如何使用它們。是時候將你的知識組織成一個嚴格的系統了。然後許多‘為什麼’和‘如何’的問題就會消失,大多數事情都會變得顯而易見。”

集合接口。集合接口的繼承結構是這樣的:”

採集接口 - 1

注意兩件事。

首先,您在這裡看到的一切都是一個界面。

其次,箭頭表示“繼承”。

“也就是說,List、Set、Queue繼承了Collection,而Map卻沒有?​​”

“是的。然後抽像類繼承這些接口,反過來,你所知道的實現繼承這些抽像類:  ArrayList、Hashtable、TreeSet……

“你是對的。”

“現在讓我們看看這些接口的方法是乾什麼用的:”

Iterable<E>:接口的方法:

方法 描述
Iterator<T> iterator(); 返回一個迭代器對象。

“這似乎還不夠。”

“好吧,這就是數量。迭代器就是這些。我們現在不會介紹它們,但我們很快就會詳細介紹它們。”

Collection<E>:接口的方法:

方法 描述
boolean add(E e); 向集合中添加一個元素
boolean addAll(Collection<? extends E> c); 向集合中添加元素
void clear(); 從集合中移除所有元素
boolean contains(Object o); 檢查集合是否包含該元素。
boolean containsAll(Collection<?> c); 檢查集合是否包含元素。
boolean equals(Object o); 檢查集合是否等價
int hashCode(); 返回哈希碼
boolean isEmpty(); 檢查集合是否為空。
Iterator<E> iterator(); 返回一個迭代器對象
boolean remove(Object o); 從集合中移除一個元素
boolean removeAll(Collection<?> c); 從集合中移除元素
boolean retainAll(Collection<?> c); 刪除所有不在 c 中的元素
int size(); 返回集合的大小
Object[] toArray(); 將集合轉換為數組
<T> T[] toArray(T[] a); 將集合轉換為數組

“這裡的一切我都已經很紮實了,這些手段我用過一半,另外一半我也遇到過。”

“很好,那我們繼續吧。”

 List<E>:接口的方法:

方法 描述
void add(int index, E element); 將元素添加到集合的中間
boolean addAll(int index, Collection<? extends E> c); 向集合中添加元素
E get(int index); 按索引返回元素
int indexOf(Object o); 返回元素的索引(數字)
int lastIndexOf(Object o); 返回最後一個元素的索引。
ListIterator<E> listIterator(); 返回列表的迭代器
ListIterator<E> listIterator(int index); 返回列表的迭代器
E remove(int index); 按索引刪除元素
E set(int index, E element); 按索引設置新值
List<E> subList(int fromIndex, int toIndex); 返回子集合

“這裡也沒有什麼新鮮事。我已經了解了幾乎所有關於收藏的知識,對此我情不自禁地感到高興。”

“好吧,我想我能找到讓你吃驚的東西。但是讓我們繼續檢查接口:”

Set<E>:接口的方法:

方法 描述
沒有方法

“Set 接口沒有任何新方法——只有它繼承的方法。”

“是啊,我看到Interable界面也什麼都沒有。

“另一方面,方法越少,記憶越少!”

“你對生活肯定的樂觀讓我很開心。”

“Set 接口由兩個具有方法的接口繼承:SortedSet 和 NavigableSet。但我不會討論它們,否則我們永遠不會完成。”

“相反,讓我給你一個描述 Java 中集合的類和接口的概況。”

“來吧。”

“那就抱緊:”

採集接口 - 2

“哇,好大啊!”

“嗯,沒那麼大。另外,請記住抽像類完全是可選的。但最好記住哪個類實現了哪些接口。這可以經常派上用場。”

“哦,我還想說明一下,有些收藏品已經過時了。”

“那些是什麼?”

“我說的是 Vector、Stack、Dictionary 和 Hashtable 類。這些是普通集合的同步(線程安全)版本。”

“但是Java添加了一個特殊的並發庫,裡面有很多集合,不僅可以從其他線程訪問,而且實現效率也高很多 。ConcurrentHashMapHashtable效率高很多。”

“您可以使用 Vector、Stack、Dictionary 和 Hashtable 集合,但不推薦這樣做。”

“知道了,我會記住的。”

“謝謝,艾莉!”