9.1 Java集合框架
9.1.1 集合接口与实现分离
Java集合类库将接口(interface)与实现(implementation)分离。例如Java可以将队列定义成接口Queue,然后队列的实现可以是链表,也可以是循环数组。具体用什么实现只要实现队列接口就可以了。
9.1.2 Collection接口
Java类库中的集合类都是实现了Collection接口。该接口有大量的和集合有关的方法。如果要操作集合,可以很方便的声明一个Collection变量。
Collection接口的文档:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Collection.html
9.1.3 迭代器
Collection接口里面有个方法:
Iterator<E> iterator() //Returns an iterator over the elements in this collection.
返回的Iterator是迭代器接口。该接口可以在指定对象中进行遍历。
Iterator接口的文档:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Iterator.html
Java中还有一个接口Iterable,实现这个接口的类可以使用foreach循环遍历。
Iterable接口的文档:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Iterable.html
9.1.4 泛型实用方法
由于Collection与Iterator都是泛型接口,这意味着你可以编写任何集合类型的实用方法。
同时,有很多泛型实用方法Java类库开发者都已经实现好了,全部包装在了AbstractCollection类里,如果要实现自己的集合类只需要继承这个抽象类就好了。
AbstractCollection类文档:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/AbstractCollection.html
9.2 集合框架中的接口
集合框架中接口众多,其中继承关系如下:
Set是数学中集的概念的实现,其中元素不可重复。
List是数组的概念的实现。
ListIterator接口是Iterator接口的一个子接口,他定义了一个用于在迭代器位置前面加一个元素的方法。
9.3 具体的集合
下面简单的列举一下Java中实现的集合,具体的使用需要查看Java文档。
再给出Java集合实现的继承关系。
9.4 映射视图
集合框架并不认为映射(map)本身是一种集合。不过可以得到映射的视图——这是实现了Collection接口或某个子接口的对象。
-
Set<Map.Entry<K, V> >entrySet()
返回Map.Entry对象(映射中的键/值对)的一个集视图。可以从这个集中删除元素,那么它们也会从映射中删除,但是不能添加任何元素。
-
Set<K> keySet()
返回映射中所有键的一个集视图。可以从这个集中删除元素,那么它们也会从映射中删除,但是不能添加任何元素。
-
Collection<V> values()
返回映射中所有值的一个集合视图。可以从这个集合中删除元素,那么它们也会从映射中删除,但是不能添加任何元素。