“嗨,阿米戈!”
“嗨,艾莉!”
“今天我们要彻底了解集合的结构。”
“我已经等了很久了。”
“你已经知道什么是集合,也知道如何使用它们。是时候将你的知识组织成一个严格的系统了。然后许多‘为什么’和‘如何’的问题就会消失,大多数事情都会变得显而易见。”
“集合接口。集合接口的继承结构是这样的:”
注意两件事。
首先,您在这里看到的一切都是一个界面。
其次,箭头表示“继承”。
“也就是说,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