2017-01-17
Java 集合类
集合类存放于 java.util
包中。集合类存放的都是对象的引用,而非对象本身。Java 并发包 java.util.concurrent.*
中存放适用于高并发即线程安全的集合类。这里只介绍 java.util
下集合类。
首先看一下 Java 常用集合类的继承关系:
|-- Iterator
| |-- Collection
| | |-- List
| | | |-- LinkedList
| | | |-- ArrayList
| | | |-- Vector
| | | |-- Stack
| | |-- Set
| | | |-- SortSet
| | | |-- TreeSet
| | | |-- HashSet(基于 HashMap 实现)
| | | |-- LinkedHashSet
| | |-- Queue
| |-- Map
| | |-- HashMap
| | |-- LinkedHashMap(基于 HashMap 实现)
| | |-- HashTable
| | |-- WeakHashMap
| | |-- TreeMap
所有的集合类,都实现了 Iterator 接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
hasNext()
是否还有下一个元素。next()
返回下一个元素。remove()
删除当前元素。
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是映射(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类和具体实现类等。
其中 Set 中不能包含重复的元素,List 是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。Map 不能包含重复的键。
是否有序 | 是否允许元素重复 | ||
---|---|---|---|
Collection | 否 | 是 | |
List | 是 | 是 | |
Set | AbstractSet | 否 | 否 |
HashSet | 否 | 否 | |
TreeSet | 是 | 否 | |
Map | AbstractMap | 否 | key 必须唯一 |
HashMap | 否 | key 必须唯一 | |
TreeMap | 是 | key 必须唯一 |
集合类的一些最佳实践
- 使用正确的集合类型,如果集合元素大小固定,使用 Array 代替 ArrayList
- 如果能够设置初始容量,并且能预估集合类大小,进行设置,避免重新计算 Hash 值或扩容
- 为了类型安全可以使用泛型
- 方法返回类型是集合的,返回数量为0的集合,代替返回 null