java.util这个重要的包包含大量的类和接口,支持很多的功能。例如,java.util具有能产生伪随机数的类,还包括可以管理日期和时间、观察事件、操作位集合、标记字符串、处理格式化数据等的类。java.util包也包含了Java中功能最强大的子系统之一:集合框架(collections Framework). 以下将分析集合框架中的接口和类。
集合接口:
Collection | 允许处理一组对象,它位于集合层次结构的项部 |
Deque | 扩展Queue接口,以处理双端队列 |
List | 扩展Collection接口,以处理序列(列表中的可以包含重复的元素) |
NavigableSet | 扩展SortedSet接口,以处理基于最接近匹配搜索的元素的取回 |
Queue | 扩展Collection接口,以处理列表中的特殊类型,其中的元素只能从前面删除 |
Set | 扩展Collection接口,以处理集合,其中的元素必须唯一 |
SortedSet | 扩展Set接口,以处理排序的集合 |
除了集合接口外,集合中还使用了Comparator, RandomAccess, Iterator 和 ListIterator 接口。简而言之,Comparator接口定义如何比较两个对象,Iterator和ListIterator接口例举集合中的对象。
Queue接口中有几个方法值得注意:poll()和remove()这两个方法都是删除一个元素,它们的区别在于,如果队列为空,则poll()返回null,而remove()会抛出一个异常,另外存在获得但不删除队列顶部元素的两种方法:element()和peek()。它们的区别在于,如果队列为空,则element()抛出一个异常,而peek()返回null。
集合类:
AbstractCollection | 实现大部分Collection接口 |
AbstractList | 扩展AbstractCollection, 实现大部分List接口 |
AbstractQueue | 扩展AbstractCollection, 实现部分Queue接口 |
AbstractSequentialList | 扩展AbstractList, 用于顺序而不是随机访问集合的元素 |
LinkedList | 通过扩展 AbstractSequentialList 实现链表 |
ArrayList | 通过扩展 AbstractList实现动态数组 |
ArrayDeque | 通过扩展AbstractCollection和实现Deque接口,实现动态双端队列 |
AbstractSet | 扩展AbstractCollection, 实现大部分Set接口 |
EnumSet | 扩展AbstractSet, 用于enum元素 |
HashSet | 扩展AbstractSet, 用于哈希表 |
LinkedHashSet | 扩展HashSet, 允许按照插入的顺序来迭代 |
PriorityQueue | 扩展AbstractQueue, 支持基于优先级的队列 |
TreeSet | 在树中实现组,扩展AbstractSet |
ArrayList 类扩展了AbstractList接口,并实现了List接口,ArrayList是一个泛型类,它的声明如下:
class ArrayList<E> 其中,E 指定将保存列表的对象的类型。
LinkedList类扩展了AbstractSequentialList,并实现List,Deque和Queue接口。它提供一个链表型的数据结构,LinkedList是一个泛型类,它的声明如下:class LinkedList<E>,其中,E指定将保存列表的对象的类型。
HashSet类扩展了AbstractSet,并且实现了Set接口,它创建一个使用哈希表来存储元素的集合。HashSet是一个泛型,它的声明如下: class HashSet<E>其中,E指定组将保存的对象类型。
LinkedHashSet类扩展了HashSet,但是没有添加自己的成员。LinkedHashSet是一个泛型类,它的声明如下:class LinkedHashSet<E>。LinkedHashSet 以元素插入的顺序来维护组中项的链表。它允许以插入的顺序在组中迭代。也就是说,当使用迭代器在LinkedHashSet中循环时,元素将以插入的顺序返回。
TreeSet类扩展了AbstractSet,并且实现了NavigableSet接口。它创建一个使用树结构来存储元素的集合,对象以升序顺序存储,访问和取回的时间很快。这使得TreeSet是存储大量有序信息的很好选择,以便能很快找到。
通过迭代器访问集合。通常,有许多情况需要遍历集合中的元素,例如显示集合中的每一个元素,一种遍历方法是使用迭代器,它是实现Iterator或者ListIterator接口的对象,使用迭代器能够在集合中遍历,以获取或者删除元素。在使用迭代器访问集合之前,必须先能够获得一个迭代器。每个集合类都提供iterator()方法来返回一个迭代器,它指向集合的开始处,通过使用这个迭代器对象,可以按一个接一个的方式访问集合中的每一个元素。一般地来说,使用迭代器遍历集合的内容时应遵循下面的步骤:
1、通过集合的iterate()方法获得一个指向集合开始处的迭代器;
2、设置一个调用 hasNext() 方法的循环。只要 hasNext()返回true,就进行循环迭代;
3、在循环中,调用next()方法获得每个元素。
映射(Map)是存储键和值之间联系或者键/值对的对象,给定一个键,可以找到它对应的值。
映射接口
Map | 映射唯一键到值 |
Map.Entry | 描述映射中的元素(一个键/值对)。它是Map的内部类 |
NavigableMap | 扩展SortedMap,以处理基于最接近匹配搜索的键/值对的取回 |
SortedMap | 扩展Map,将键以升序保存 |
Map.Entry接口,能够使用映射项(即映射的一个键/值对)。注意,Map接口声明的entrySet()方法返回的是包含所有映射键/值对的组,每个元组元素就是一个Map.Entry对象。Map.Entry是一个泛型接口。
映射类:
AbstractMap | 实现大部分Map接口 |
EnumMap | 扩展AbstractMap,用于enum键 |
HashMap | 扩展AbstractMap,用于哈希表 |
TreeMap | 扩展AbstractMap,用于树结构 |
WeakHashMap | 扩展AbstractMap,用于弱键的哈希表 |
LinkedHashMap | 扩展HashMap,允许按照插入的顺序来迭代 |
IdentityHashMap | 扩展AbstractMap,并在比较文档时使用等价的引用 |