Java集合框架
在此之前的Java2,Java提供特设课程,如字典,向量,堆栈和属性(Dictionary, Vector, Stack,Properties)来存储和处理的对象组。虽然这些类是非常有用的,他们缺乏一个中心,统一的主题。因此,所使用的矢量的方式是从使用属性的方式不同。
集合框架的目的是要满足几个目标。
-
框架必须是高性能的。在实现了基本的集合(动态数组,链表,树,哈希表)是高效的。
-
框架具有允许不同类型的集合以类似的方式和高度的互操作性。
-
扩展和/或适应的集合必须是容易的。
为此,整个集合框架是围绕一组标准的接口设计。提供了几种标准的实现,例如LinkedList,HashSet和TreeSet,这些接口,可以按原样使用,也可以实现自己的集合。
一个集合框架是一个统一的体系结构来表示和操作集合。所有集合框架包含以下内容:
-
接口: 这些都是表示集合的抽象数据类型。接口允许其代表性细节的集合可以独立操作。在面向对象的语言,接口一般形成了一个等级。
-
实现,即类: 这些都是集合接口的具体实现。在本质上,它们是可重复使用的数据结构。
-
算法: 这些是执行有用的计算的方法,例如搜索和排序,在该实施集合接口的对象。说是多态的算法:也就是说,同样的方法可以在许多不同的适当的集合接口的实现中使用。
除了集合该框架定义了几个映射的接口和类。映射存储键/值对。虽然映射是不是在正确使用的术语集合,但它们与集合完全集成。
集合接口:
集合框架定义了几个接口。本节提供了每个接口的概述:
SN | 接口及描述 |
---|---|
1 |
Collection 接口 这可以使用对象组的工作,它是在集合层次结构的顶层。 |
2 |
List 接口 这扩展集合和列表的一个实例存储元素的有序集合。 |
3 |
Set 这扩大集合到处理集合,其中必须包含独特的元素 |
4 |
SortedSet 这扩展集合为处理有序集合 |
5 |
Map 这对应唯一键的值。 |
6 |
Map.Entry 这说明在映射中的元素(一个键/值对)。这是一个内部Map类。 |
7 |
SortedMap 扩展映射Map,这样键维持升序排列。 |
8 |
Enumeration 这是传统的接口和定义,通过它可以枚举(获得一次一个)的对象集合的元素的方法。这个传统界面已经被取代了迭代器。 |
集合类:
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 扩展HashMap,允许插入顺序迭代。 |
15 |
IdentityHashMap 扩展AbstractMap并使用引用相等性比较文档时。 |
AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList 和 AbstractMap 类提供的核心集合接口的框架实现,以最大限度地减少实现它们所需的工作。
java.util中所定义的以下旧式类在以前的基础教程中已经讨论过:
SN | 类及描述 |
---|---|
1 |
Vector 这样就实现了动态数组。它类似于ArrayList,但有一些不同。 |
2 |
Stack 堆栈是向量的一个子类,实现了一个标准的后进先出的堆栈。 |
3 |
Dictionary 字典是代表一个键/值存储库,工作很像Map抽象类。 |
4 |
Hashtable Hashtable 哈希表是原来java.util中的一部分,是一个具体实现一个字典。 |
5 |
Properties Properties是哈希表的一个子类。它是用来维持值列表,其中键是一个字符串,值也是一个字符串。 |
6 |
BitSet BitSet 类创建一个特殊类型的数组保存位值。此数组的大小可以根据需要增加。 |
收集算法:
集合框架定义了可以被应用到集合和映射的几种算法。这些算法被定义为集合类中的静态方法。
有几个方法可以抛出ClassCastException,当它尝试进行比较不兼容的类型时,或者抛出一个UnsupportedOperationException,当它试图修改一个不可修改的集合发生。
集合定义了三个静态变量:EMPTY_SET,EMPTY_LIST和EMPTY_MAP。这些都是不可改变的。
SN | 算法及描述 |
---|---|
1 |
The Collection Algorithms 这里是所有算法的实现的列表。 |
如何使用迭代器?
通常情况下,想通过循环在集合中的元素。例如,可能希望显示的每个元素。
做到这一点最简单的方法是使用一个迭代器,它是一个对象,它是实现迭代器或ListIterator接口。
迭代器,使能够循环通过收集,获取或移除元素。ListIterator扩展迭代器允许列表和元素的修饰双向遍历。
SN | 迭代器方法及描述 |
---|---|
1 |
使用Java迭代器 下面是所有与迭代器的ListIterator和接口提供了实例方法的列表。 |
如何使用一个比较器?
这两个TreeSet 和 TreeMap的存储元素是已以排序顺序。然而,它是定义它们排序顺序装置正是比较器。
这个接口可以让我们以不同方式整理一个给定集合中所有数量。另外这个接口可用于任何类(甚至类,我们不能修改)任何实例进行排序。
SN | 比较器方法及描述 |
---|---|
1 |
使用Java比较器 这里是所有由比较器接口提供实施例的方法的列表。 |
总结:
Java集合框架为程序员提供了获取预先包装的数据结构以及用于操纵他们的算法。
集合是一个对象,它可以容纳其他对象的引用。集合接口声明可以在每个类型的集合上执行的操作。
集合框架的类和接口都在java.util包中。