Java 2 之前,Java 为对象组的存储和操作提供了特别的类比如 字典,向量,堆栈和属性。尽管这些类确实有用,它们缺少一个中心的,统一的主题。因此,你使用向量的方法和你使用属性的方法是不同的。
集合框架被设计来满足几个目标
- 框架需要是高性能的。基础集合(动态数组,链表,数和哈希表)是高效的。
- 框架需要允许不同的集合类型以类似的方式和高度的互操作性工作。
- 扩展或者调整集合必须是简单的。
为此,整个集合框架被设计围绕一系列的标准接口。几个接口的标准实现例如 LinkedList, HashSet 和 TreeSet 被提供,如果你选择的话,你可以使用,你也可以实现你自己的集合。
一个集合框架是一个统一的体系结构表示和操作集合。所有的集合框架包含以下:
- 接口: 这些是代表集合的抽象数据类型。接口允许集合独立操作它们表示的细节。在面向对象的语言中,接口通常形成一个层次结构。
- 实现,即类: 这些是集合接口的具体实施。从本质上说,它们是可重用的数据结构。
- 算法: 这些是在实现集合接口的对象上进行有用计算的方法,比如搜索和排序。算法被称为多态的,那就是说,同一个方法能被用在许多不同的合适的集合接口的实现上。
除了集合,框架定义了几个 map 接口和类 Maps 存储键值对。尽管 maps 不是正确使用集合的术语,但是他们完全由集合整合起来。
Collection 接口
集合框架定义了几个接口。如下提供了每个接口的概览:
SN | 接口描述 |
---|---|
1 | Collection 接口 这让你可以使用对象组;它是集合层次阶段的顶端 |
2 | List 接口 它继承了 Collection 并且 List 的一个实例存储了元素的一个有序集合 |
3 | Set 它继承了 Collection 来处理集,它必须含有特殊的元素 |
4 | SortedSet 它继承了 Set 来处理 排序的 set |
5 | Map 它将独特的键和值匹配 |
6 | Map Entry 这描述了映射中的一个元素(一个键值对)。它是 Map 的一个内部类。 |
7 | SortedMap 它继承了 Map 因此键按升序保持 |
8 | Enumeration 它是旧有的接口并定义了你可以在对象的集合中列举(一次获得一个)元素的方法。这个旧有的接口被迭代器取代了。 |
Collection 类
Java 提供了一系列的实现集合接口的标准集合类。一些类提供了完全的能被直接使用的实现,其他就是抽象类,提供的被用来作为创建具体集合的实现。
标准的 collection 类在下面的表格中被概括:
SN | 类描述 |
---|---|
1 | AbstractCollection 实现大部分的 Collection 接口 |
2 | AbstractList 继承 AbstractCollection 并且实现大部分 List 接口 |
3 | AbstractSequentialList 通过一个使用有序的而不是随机访问它的元素的集合继承 AbstractList |
4 | LinkedList 通过继承 AbstractSequentialList 实现一个链表 |
5 | ArrayList 通过继承 AbstractList 实现一个动态数组 |
6 | AbstractSet 继承 AbstractCollection 并实现大部分的 Set 接口 |
7 | HashSet 用一个哈希表继承 AbstractSet |
8 | LinkedHashSet 继承 HashSet 来允许插入顺序迭代 |
9 | TreeSet 实现在树中存储的一个集。继承 AbstractSet |
10 | AbstractMap 实现大部分的 Map 接口 |
11 | HashMap 用一个哈希表继承 AbstractMap |
12 | TreeMap 用一棵树继承 AbstractMap |
13 | WeakHashMap 用一个使用弱键的哈希表来继承 AbstractMap |
14 | LinkedHashMap 继承 AbstractMap 来允许插入顺序迭代 |
15 | IdentityHashMap 继承 AbstractMap 类并且当比较文档时平等使用参考 |
AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList 和 AbstractMap 类提供了核心集合接口的实现,尽量减少努力来实现它们。
以下的由 java.util 定义的旧有的类在前面的指南中已经被讨论过:
SN | 类描述 |
---|---|
1 | Vector 这实现一个动态数组。它和 ArrayList 类似,但也有一些不同。 |
2 | Stack Stack 是 Vector 的实现标准的后进先出栈的子类 |
3 | Dictionary Dictionary 是一个抽象的代表一个键值对存储库的类并且操作起来非常像 Map |
4 | Hashtable Hashtable 是初始的 java.util 的一部分并且是 Dictionary 的具体实现 |
5 | Properties Properties 是 Hashtable 的一个子类。它被用来保持键是一个字符串并且值也是一个字符串的值的列表 |
6 | BitSet 一个 BitSet 类创建一个特殊的保持 bit 数值的数组类型。这个数组的大小能根据需要增长 |
Collection 算法
集合框架定义了几个能被应用到 collections 和 maps 的算法。这些算法在 Collection 类的内部被定义为静态方法。
几个方法能抛出异常 ClassCastException,它发生在想要比较不兼容的类型时;或者异常UnsupportedOperationException,它发生在想要修改一个不能修改的集合时。
集合定义了三个静态变量:EMPTY_SET, EMPTY_LIST, 和 EMPTY_MAP。所有都是不变的。
SN | 算法描述 |
---|---|
1 | The Collection Algorithms 这是所有算法实现的列表 |