“嗨,阿米戈!”
“嗨,艾莉!”
“今天我們要徹底了解集合的結構。”
“我已經等了很久了。”
“你已經知道什麼是集合,也知道如何使用它們。是時候將你的知識組織成一個嚴格的系統了。然後許多‘為什麼’和‘如何’的問題就會消失,大多數事情都會變得顯而易見。”
“集合接口。集合接口的繼承結構是這樣的:”
注意兩件事。
首先,您在這裡看到的一切都是一個界面。
其次,箭頭表示“繼承”。
“也就是說,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 中集合的類和接口的概況。”
“來吧。”
“那就抱緊:”
“哇,好大啊!”
“嗯,沒那麼大。另外,請記住抽像類完全是可選的。但最好記住哪個類實現了哪些接口。這可以經常派上用場。”
“哦,我還想說明一下,有些收藏品已經過時了。”
“那些是什麼?”
“我說的是 Vector、Stack、Dictionary 和 Hashtable 類。這些是普通集合的同步(線程安全)版本。”
“但是Java添加了一個特殊的並發庫,裡面有很多集合,不僅可以從其他線程訪問,而且實現效率也高很多 。ConcurrentHashMap比Hashtable效率高很多。”
“您可以使用 Vector、Stack、Dictionary 和 Hashtable 集合,但不推薦這樣做。”
“知道了,我會記住的。”
“謝謝,艾莉!”
GO TO FULL VERSION