您的位置:首页 > 编程语言 > Java开发

Java Collection Framework 之集合概述

2014-04-12 12:25 302 查看

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>接口:

从逻辑上来说Set<E>接口所定义的功能和Collection<E>并没有太大差别,自己也没有比Collection<E>定义额外的方法,唯一的区别是在Set<E>的实现过程中应当确保他当中的集合元素不能够重复(对重复的判断规则可能根据具体实现类有所不同)。

SortedSet<E>接口:

该接口为Set<E>集合添加了排序的功能,使得SortedSet<E>有了基于排序的特性。
1、获得在排序中的第一个和最后一个元素(first()和last()方法)。
2、 截取子SortedSet(subSet()和tailSet()方法)。
PS1:SortedSet虽然提供了元素的排序但是却不提供对元素的索引(不具有按索引访问元素的能力)。
PS2:SortedSet在排序时需要用到比较方法。因此作为SortedSet的元素需要实现Comparable接口,该接口只有一个方法comparTo(T o)方法。实现该方法 应遵循这样的规则,当this大于o返回1,相等返回0,this小于o返回0(简单记忆就是this-0的值决定1的正负)。
PS3:SortedSet的排序默认是升序的,如果要实现定制的排序方案,在各实现类中会提供相应的构造方法。

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java集合