13.1.2 类集框架主要接口
在整个Java类集中最常使用的类集接口是:Collection、List、Set、Map、Iterator、ListIterator、Enumeration、SortedSet、SortedMap、Queue、Map.Entry,这些接口的具体特点如表13-1所示。
表13-1 类集框架接口的具体特点
序 号 | 接 口 | 描 述 |
1 | Collection | 是存放一组单值的最大接口,所谓的单值是指 集合中的每个元素都是一个对象。一般很少 直接使用此接口直接操作 |
2 | List | 是Collection接口的子接口,也是最常用的接口。 此接口对Collection接口进行了大量的扩充, 里面的内容是允许重复的 |
3 | Set | 是Collection接口的子类,没有对Collection 接口进行扩充,里面不允许存放重复内容 |
4 | Map | 是存放一对值的最大接口,即接口中的每个 元素都是一对,以key→value的形式保存 |
5 | Iterator | 集合的输出接口,用于输出集合中的内容, 只能进行从前到后的单向输出 |
6 | ListIterator | 是Iterator的子接口,可以进行双向输出 |
7 | Enumeration | 是最早的输出接口,用于输出指定集合中的内容 |
8 | SortedSet | 单值的排序接口,实现此接口的集合类, 里面的内容可以使用比较器排序 |
9 | SortedMap | 存放一对值的排序接口,实现此接口的集合类, 里面的内容按照key排序,使用比较器排序 |
10 | Queue | 队列接口,此接口的子类可以实现队列操作 |
11 | Map.Entry | Map.Entry的内部接口,每个Map.Entry对象 都保存着一对key→value的内容,每个Map 接口中都保存有多个Map.Entry接口实例 |
这些接口中本身是存在继承关系的,其中部分接口的继承关系如图13-1所示。
(点击查看大图)图13-1 接口的继承关系 |
下面将介绍这些接口的作用及其常用子类。
U提示:SortedXx定义的接口都属于排序接口。
在Java类集中凡是以Sorted开头的全部都属于排序的接口,如SortedSet、SortedMap。
13.2.1 Collection接口的定义
Collection接口的定义如下:
public interface Collection<E> extends Iterable<E>
从接口的定义中可以发现,此接口使用了泛型的定义,在操作时必须指定具体的操作类型。这样可以保证类集操作的安全性,避免发生ClassCastException异常。
U提示:JDK 1.5之后类集才增加了泛型的支持。
在JDK 1.5之前的类集框架中可以存放任意的对象到集合中,这样一来在操作时就可能出现因为类型不统一而造成的ClassCastException异常。所以在JDK 1.5之后为了保证类集中所有元素的类型一致,将类集框架进行了升级,加入了泛型,这样就可以保证一个集合中的全部元素的类型是统一的。
Collection接口是单值存放的最大父接口,可以向其中保存多个单值(单个的对象)数据。此接口定义了表13-2所示的方法定义。
表13-2 Collection接口的方法定义
序号 | 方 法 | 类型 | 描 述 |
1 | public boolean add(E o) | 普通 | 向集合中插入对象 |
2 | public boolean addAll (Collection<? extends E> c) | 普通 | 将一个集合的内容插入进来 |
3 | public void clear() | 普通 | 清除此集合中的所有元素 |
4 | public boolean contains(Object o) | 普通 | 判断某一个对象是否在集合中存在 |
5 | public boolean containsAll (Collection<?> c) | 普通 | 判断一组对象是否在集合中存在 |
6 | public boolean equals(Object o) | 普通 | 对象比较 |
7 | public int hashCode() | 普通 | 哈希码 |
8 | public boolean isEmpty() | 普通 | 集合是否为空 |
9 | public Iterator<E> iterator() | 普通 | 为Iterator接口实例化 |
10 | public boolean remove(Object o) | 普通 | 删除指定对象 |
续表
序号 | 方 法 | 类型 | 描 述 |
11 | public boolean removeAll (Collection<?> c) | 普通 | 删除一组对象 |
12 | public boolean retainAll (Collection<?> c) | 普通 | 保存指定内容 |
13 | public int size() | 普通 | 求出集合的大小 |
14 | public Object[] toArray() | 普通 | 将一个集合变 为对象数组 |
15 | public <T> T[] toArray(T[] a) | 普通 | 指定好返回的 对象数组类型 |
在一般的开发中,往往很少直接使用Collection接口进行开发,基本上都是使用其子接口。子接口主要有List、Set、Queue和SortedSet。
U提示:关于Collection接口很少直接使用的说明。
在Java最早的程序开发中提倡使用Collection,这一点在EJB 2.x(Enterprise JavaBean,专门用作分布式程序开发的一套标准规范)中体现得非常明显。但是随着Java的发展,为 了让程序的开发及使用更加明确,例如,此集合中的内容是否可以重复、是否可以排序 等,所以提倡直接使用Collection的子接口,这一点在SUN的开源项目--宠物商店中特别明显。