Java集合框架是一套用于处理集合元素的工具。它位于java.util包一下,由两个基本接口组成:Collection<E>,和
Map<K,V>。
下面简单的介绍下Collection<E>接口。
Collection<E>接口抽象出一个容器。
该容器有以下特点:
1、 具有添加一个或一组元素的功能(add()与addAll()方法)。
2、 具有移除全部,一个或一组元素的功能(clear(),remove()和removeAll()方法)。
3、 具有判断指定一个或一组元素是否存在于集合中的功能(contain()和containAll()方法)。
4、 能够返回容器中现有元素数量和判断容器是否为空的功能(size()和isEmpty()方法)。
5、 能够使客户遍历容器中全部元素的功能(iterator()和toArray()方法)。
下面是Collection<E>层次结构图,其中只列出了比较关键的接口,一旦某个类实现了其中的接口,该类将会拥有该接口定义的功能。
Collection<E>有三个常用子接口 Set<E>、List<E>、Queue<E>。
Set<E>接口:
SortedSet<E>接口:
2、 截取子SortedSet(subSet()和tailSet()方法)。
PS1:SortedSet虽然提供了元素的排序但是却不提供对元素的索引(不具有按索引访问元素的能力)。
PS2:SortedSet在排序时需要用到比较方法。因此作为SortedSet的元素需要实现Comparable接口,该接口只有一个方法comparTo(T o)方法。实现该方法 应 遵循这样的规则,当this大于o返回1,相等返回0,this小于o返回0(简单记忆就是this-0的值决定1的正负)。
NavigableSet<E>接口:
NavigableSet接口扩展了SortedSet的功能,使得Set利用已排好的元素实现更多的功能:
1、 逆序操作,比如descendingIterator()返回一个逆序遍历的工具,比如descendingSet()返回一个逆序的NavigableSet对象。
2、 扩展的截取功能,比如截取特定元素之前,之后的元素。
3、 寻找特定元素的前一个(lower()),后一个(higher())元素。
List<E>接口:
List<E>接口规定了一个其中元素有规定逻辑顺序的容器,该容器中的元素可以重复。List<E>容器在继承了Collection<E>容器的基本功能基础之上还添加了一些额 外的功能(这些功能是基于List的顺序结构之上的,因此基本与索引有关):
1、 按索引来访问容器中的元素(get()方法)。
2、 寻找在特定索引处的元素(indexOf()方法)。
3、 截取子队列(subList()方法)。
4、 扩展的添加元素的功能,支持在特定索引处添加元素或一组元素。
Queue<E>接口:
该接口给Collection中的添加删除元素的功能做了一些限制,同时在Queue中元素之间是有先后的排序关系(具体的关系根据实现类会有所不同)。
添加元素只能添加在逻辑顺序的队尾,删除元素只能删除逻辑顺序的队头。(逻辑上的顺序因实现类的不同会有所差别)。
1、 队头添加(add()和offer()方法)。
2、 获得队头元素(element(),peek(),poll()和remove()方法)。
Deque<E>接口:
该接口扩展了Queue的功能,使得其能够在逻辑顺序的队头队尾都有插入和删除的功能。同时如果用户,只利用该集合的一端(比如所队头),只限制在一端进行插入与删除,将会实现栈的功能(先进后出)。
该接口的方法命名,部分是在Queue的基础上加上First或者Last后缀。
并抽象出了栈的操作(push()和pop())虽然该功能可以通过其他Deque的方法实现,但当你是想将该接口作为栈使用,还是使用这两个操作。
在最后:
这个层次结构图中,基本上定义了集合框架中集合有关类的全部功能,只不过在具体类的实现中,可能存在对这些接口所定义功能的不同解释,但从逻辑概念上来说,java库中的集合都是严格按照这些定义所设计的,具体的使用方法,参见API。