Collection的接口们

本文介绍了Java集合框架的核心接口,包括Collection、Set、List、Queue、Deque和Map等,并阐述了它们的特点及应用场景。同时,文章还讲解了如何有效使用这些接口,以及不同接口之间的区别。

Java有很多核心接口对不同类型的Collection进行了封装。可以参看下图。这些接口能够让你方便操纵Collection,不用依赖它们的具体实现。这些接口是Java合集框架的基础。
Collection接口

Set是一种特殊的Collection,SortedSet是一种特殊的Set, 以此类推 :). 请注意上图的接口层次包含了两个不同的树,其中Map严格意义上不算作真正的Collection.

注意,核心接口都支持泛型,下面是接口的声明语句:

public interface Collection<E>...

<E>的语法就是说明接口是支持泛型的。因此当你声明一个Collection实例时,你需要指定Collection所包含元素的数据类型。 指定了数据类型,Java在编译期就能判断出你放入Collection的元素类型是不是一致,从而可以尽可能的减少运行期的错误。如果要了解更多泛型的知识,可能参看 Generics (Updated)

当你掌握了如何使用这些接口, 你就掌握了Java合集框架的大部分内容了。这一篇章我们就讲讲如何有效的使用这些接口,以及什么情况下用什么样的接口。你也会学习到每一个接口的编程上的习语能帮助你更全面的了解它。

为了控制接口的数量以方便管理, Java并没有对每种Collection的变体(这包括不可变的,固定长度的,只允许添加的)都提供一个独立的接口。实际上,每个接口里的操作被设计成了可选的-具体实现可以选择不支持所有的操作。如果调用到了不支持的操作, 就会抛出UnsupportedOperationException。到时候实现者有责任去好好记录他们实现了那些可选的操作。在Java里面,已经做好的通用的实现是支持所有的可选操作的。

下面的列表描述了Collection的接口们:

  • Collection Collection是它的等级层次结构中的根节点。一个Collection代表一组对象,这里对象也叫Collection的元素。Collection接口是所有集合实现的最小公共部分,在需要最大通用性时,可以考虑用它来进行集合数据传递和操作。有一些Collections的类型允许重复元素,有的不允许。有些是有序的,有些是无序的。Java平台没有提供这些功能的直接实现类,相反它定义了有更详细操作的子接口。如Set和List
  • Set Set是不允许有重复元素的集合。此接口就是对数学上抽象集合的建模,经常用来表示集合如一幅扑克里所有的牌,学生要学习的课程,机器上正在运行的进程。
  • List 有序的集合 (也可以叫做序列),List可以包含重复元素。一般说来,List用户能够把元素精确的插入到指定的位置, 也可以根据一个整型的下标(位置)来访问具体元素。如果你用过Vector,就会对List比较了解了。
  • Queue 队列是在多个元素被处理之前存放他们的一种集合。除了了基本的Collection操作,队列还提供了插入、提取和查看操作。
    典型的队列都是(并不必须是这样)先进先出的方式排序元素的。在这中间有一个例外情况如优先级队列, 它就是根据提供的比较器或者元素的自然顺序排序元素的。无论用的是哪种排序方式, 只要调用了方法remove或者poll,处在队列头的元素就会被移除掉。在一个先进先出的队列里,所有新元素都会被插入到队列的尾部。 其它种类的队列可能会用到不同的插入存放规则。每种队列的实现都必须指定它的排序方式。

  • Deque 双向队列是在多个元素被处理之前存放他们的一种集合。除了了基本的Collection操作,队列还提供了插入、提取和查看操作。
    双向队列可以用作先进先出(FIFO),也可以用在后进先出(LIFO)。在双向队列中,所有的新元素都可以在两头插入、获取或者删除。

  • Map Map是一种匹配键和值的对象。一个Map是不能包含重复的键的,一个键只能匹配零个或者一个值。如果你曾经用过Hashtable,那么你对Map的基本概念就不会陌生了。

最后两个接口就是排序版的Set和Map

  • SortedSet SortedSet就是一个用升序方式管理它的元素的集合,还提供了几个额外的操作来更好的利用有序的特征。SortedSet经常用在自然有序的集合场景, 如单词表,会员册。
  • SortedMap SortedMap就是一个用升序键方式管理它的元素的对象。和SortedSet非常类似。 SortedMap经常用到自然有序的键值对场景,如字典、电话目录。

附一张自己做的类图
原文见:
http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值