文章目录
在使用Java语言开发时,绕不开对集合的使用,因此,对集合的掌握是非常有必要的。除此之外,Java的集合框架设计也能看出一些数据结构的设计思想,对开发的进阶是很有帮忙的。本系列文章以JDK1.6为例,介绍下集合框架。
一、集合框架概述
谈Java集合框架,基本上绕不开一张图,如下:
从上图可以看出,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等。
1.1 Collection继承关系
用非图表的形式表示Collection主要类之间的关系的话,如下(└代表继承关系):
|–Collection
|----└ List
|--------└ AbstractList
|----------------└ AbstractSequentialList
|------------------------------└ LinkedList
|----------------└ ArrayList
|----------------└ Vector
|--------------------└ Stack
|----└ Set
|--------└ AbstractSet
|---------------└ HashSet
|--------------------└ LinkedHashSet
|---------------└ TreeSet
1.2 Map继承关系
用非图表的形式表示Map主要类之间的关系的话,如下(└代表继承关系):
|–Map
|----└ AbstractMap
|------------└ HashMap
|-------------------└ LinkedHashMap
|------------└ TreeMap
|------------└ Hashtable
1.1和1.2中列出的类或接口只是最常用的一些,用来描述他们之间的继承关系。
二、Collection相关
Collection相关的类,关注Collection.java和AbstractCollection.java即可。
2.1 Collection
Collection是集合框架的根接口(interface),定义了不同集合具体实现类都要实现的通用性方法。
2.1.1 Collection接口汇总
方法 | 作用 |
---|---|
public boolean add(E object) | 添加元素 |
public boolean addAll(Collection<? extends E> collection) | 添加另一个集合的元素 |
public void clear() | 清空集合 |
public boolean contains(Object object) | 判断是否包含某个元素 |
public boolean containsAll(Collection<?> collection) | 判断是否包含某个集合中的所有元素 |
public boolean equals(Object object) | 比较两个元素是否相等 |
public int hashCode() | 哈希值 |
public boolean isEmpty() | 判断集合是否为空 |
public Iterator iterator() | 返回集合迭代器 |
public boolean remove(Object object) | 清除某个元素 |
public boolean removeAll(Collection<?> collection) | 清除某个集合中的所有元素 |
public boolean retainAll(Collection<?> collection) | 判断两个集合是否存在并集 |
public int size() | 返回集合中的元素个数 |
public Object[ ] toArray() | 将集合转化为数组 |
public T[ ] toArray(T[] array) | 将集合转化为数组 |
2.1.2 Collection接口详述
1、public boolean add(E object)
添加指定的元素。如果此 collection 由于调用而发生更改,则返回 true;如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。
如果 collection 由于某些原因(已经包含该元素的原因除外)拒绝添加特定的元素,那么它必须 抛出一个异常。
参数:
object - 确定此 collection 中是否存在的元素。
返回:
如果此 collection 由于调用而发生更改,则返回 true。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 add 操作。
ClassCastException - 如果指定元素的类不允许它添加到此 collection 中。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
IllegalArgumentException - 如果元素的某属性不允许它添加到此 collection 中。
IllegalStateException - 如果由于插入限制,元素不能在此时间添加。
2、public boolean addAll(Collection<? extends E> collection)
将指定 collection 中的所有元素都添加到此 collection 中。
参数:
collection - 包含要添加到此 collection 的元素的 collection。
返回:
如果此 collection 由于调用而发生更改,则返回 true。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 addAll 方法。
ClassCastException - 如果指定 collection 中某个元素的类不允许它添加到此collection中。
NullPointerException - 如果指定 collection 包含 null 元素,并且此 collection 不支持 null。 元素,或者指定的 collection 为 null 。
IllegalArgumentException - 如果指定 collection 的元素的某属性不允许它添加到此 collection 中。
IllegalStateException - 如果由于插入限制,不是所有的元素都能在此时间添加。
3、public void clear()
移除此 collection 中的所有元素。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 clear 操作。
4、public boolean contains(Object object)
如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少包含一个满足的元素object 时,返回 true。
参数:
object - 测试在此 collection 中是否存在的元素。
返回:
如果此 collection 包含指定的元素,则返回 true。
抛出:
ClassCastException - 如果指定元素的类型与此 collection 不兼容。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
5、public boolean containsAll(Collection<?> collection)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
参数:
collection - 将检查是否包含在此 collection 中的 collection 。
返回:
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
抛出:
ClassCastException - 如果指定 collection 中有一个或多个元素的类型与此 collection 不兼容。
NullPointerException - 如果指定 collection 包含一个或多个 null 元素,并且此 collection 不允许 null 元素,或者指定的 collection 为 null。
6、public boolean equals(Object object)
比较两个对象是否相等。
覆盖:
Object类中的 equals。
参数:
object - 要与此 collection 进行相等性比较的对象。
返回:
如果指定对象与此 collection 相等,则返回 true。
7、public int hashCode()
返回此 collection 的哈希码值。当 Collection 接口没有为 Object.hashCode 方法的常规协定添加任何约束时,为了满足 Object.hashCode 方法的常规协定,开发人员应该注意任何重写 Object.equals 方法的类必须重写 Object.hashCode 方法。需要特别指出的是,c1.equals(c2) 暗示着 c1.hashCode() == c2.hashCode()。
覆盖:
Object类中的 hashCode。
返回:
此 collection 的哈希码值。
8、public boolean isEmpty()
判断collection是否包含元素。
返回:
如果此 collection 不包含元素,则返回 true。
9、public Iterator iterator()
返回在此 collection 的元素上进行迭代的迭代器。关于元素返回的顺序没有任何保证(除非此 collection 是个能提供保证顺序的类实例)。
指定者:
接口 Iterable 中的 iterator。
返回:
在此 collection 的元素上进行迭代的 Iterator。
10、public boolean remove(Object object)
从此 collection 中移除指定元素的单个实例。更确切地讲,如果此 collection 包含一个或多个满足 (o==null ? e == null : o.equals(e)) 的元素object,则移除这样的元素,返回 true 。
参数:
object - 要从此 collection 中移除的元素(如果存在)。
返回:
如果此调用将移除一个元素,则返回 true。
抛出:
ClassCastException - 如果指定元素的类型与此 collection 不兼容。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
UnsupportedOperationException - 如果此 collection 不支持 remove 操作。
11、public boolean removeAll(Collection<?> collection)
移除此 collection 中那些也包含在指定 collection 中的所有元素。
参数:
collection - 办好要从此 collection 移除的元素的 collection。
返回:
如果此 collection 由于调用而发生更改,则返回 true。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 removeAll 方法。
ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不支持 null 元素,或者指定的 collection 为 null。
12、public boolean retainAll(Collection<?> collection)
仅保留此 collection 中那些也包含在指定 collection 的元素,可理解为求并集。
参数:
collection - 包含保留在此 collection 中的元素的 collection 。
返回:
如果此 collection 由于调用而发生更改,则返回 true 。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 retainAll 操作 。
ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不允许 null 元素(可选),或者指定的 collection 为 null。
13、public int size()
返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
返回:
此 collection 中的元素数。
14、public Object[ ] toArray()
返回包含此 collection 中所有元素的数组。
返回:
包含此 collection 中所有元素的数组。
15、public T[ ] toArray(T[] array)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将分配一个具有指定数组的运行时类型和此 collection 大小的新数组。
参数:
array - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
返回:
包含此 collection 中所有元素的数组
抛出:
ArrayStoreException - 如果指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型 。
NullPointerException - 如果指定的数组为 null。
2.2 AbstractCollection
2.2.1 AbstractCollection接口汇总
方法 | 作用 |
---|---|
public boolean add(E object) | 添加元素 |
public boolean addAll(Collection<? extends E> collection) | 添加一个集合中的全部元素 |
public void clear() | 清空集合 |
public boolean contains(Object object) | 判断是否包含元素 |
public boolean containsAll(Collection<?> collection) | 判断是否完全包含一个集合中的元素 |
public boolean isEmpty() | 判断是否为空 |
public abstract Iterator iterator() | 返回迭代器 |
public boolean remove(Object object) | 清除某个元素 |
public boolean removeAll(Collection<?> collection) | 清除一个集合中的所有元素怒 |
public boolean retainAll(Collection<?> collection) | 判断是否存在并集 |
public abstract int size() | 返回集合元素个数 |
public Object[ ] toArray() | 将集合转化为数组 |
public T[ ] toArray(T[ ] contents) | 将集合转化为数组 |
public String toString() | 字符串表示 |
2.2.2 AbstractCollection接口详述
AbstractCollection是个抽象类,实现了Collection接口。此类提供 Collection 接口的骨干实现,以最大限度地减少了实现Collection接口所需的工作。 具体如下:
1、public boolean add(E object)
确保此 collection 包含指定的元素,如果此 collection 由于调用而发生更改,则返回 true。
指定者:
接口 Collection 中的 add
参数:
object - 确定此 collection 中是否存在的元素。
返回:
如果此 collection 由于调用而发生更改,则返回 true 。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 add 操作 。
ClassCastException - 如果指定元素的类不允许它添加到此 collection 中 。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素 。
IllegalArgumentException - 如果元素的某属性不允许它添加到此 collection 中 。
IllegalStateException - 如果由于插入限制,元素不能在此时间添加。
2、public boolean addAll(Collection<? extends E> collection)
将指定 collection 中的所有元素都添加到此 collection 中。
指定者:
接口 Collection 中的 addAll。
参数:
collection - 包含要添加到此 collection 的元素的 collection。
返回:
如果此 collection 由于调用而发生更改,则返回 true。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 addAll 方法。
ClassCastException - 如果指定 collection 中某个元素的类不允许它添加到此 collection 中 。
NullPointerException - 如果指定 collection 包含 null 元素,并且此 collection 不支持 null 元素,或者指定的 collection 为 null 。
IllegalArgumentException - 如果指定 collection 的元素的某属性不允许它添加到此 collection 中。
IllegalStateException - 如果由于插入限制,不是所有的元素都能在此时间添加。
3、public void clear()
移除此 collection 中的所有元素。
指定者:
接口 Collection 中的 clear。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 clear 操作。
4、public boolean contains(Object object)
如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少 包含一个满足 (o==null ? e == null : o.equals(e)) 的元素 e 时,返回 true。
指定者:
接口 Collection 中的 contains。
参数:
object - 测试在此 collection 中是否存在的元素。
返回:
如果此 collection 包含指定的元素,则返回 true。
抛出:
ClassCastException - 如果指定元素的类型与此 collection 不兼容。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
5、public boolean containsAll(Collection<?> collection)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
指定者:
接口 Collection 中的 containsAll。
参数:
collection - 将检查是否包含在此 collection 中的 collection 。
返回:
如果此 collection 包含指定 collection 中的所有元素,则返回 true 。
抛出:
ClassCastException - 如果指定 collection 中有一个或多个元素的类型与此 collection 不兼容。
NullPointerException - 如果指定 collection 包含一个或多个 null 元素,并且此 collection 不允许 null 元素,或者指定的 collection 为 null。
6、public boolean isEmpty()
判断集合是否为空。
指定者:
接口 Collection 中的 isEmpty。
返回:
如果此 collection 不包含元素,则返回 true。
7、public abstract Iterator iterator()
返回一个迭代器,由具体的子类去实现。
返回:
在此 collection 中的元素上进行迭代的迭代器。
8、public boolean remove(Object object)
从此 collection 中移除指定元素的单个实例,更确切地讲,如果此 collection 包含一个或多个满足 (o == null ? e == null : o.equals(e)) 的元素 e,则移除这样的元素。
指定者:
接口 Collection 中的 remove
参数:
object - 要从此 collection 中移除的元素。
返回:
如果此调用将移除一个元素,则返回 true 。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 remove 操作 。
ClassCastException - 如果指定元素的类型与此 collection 不兼容。
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素。
9、public boolean removeAll(Collection<?> collection)
移除此 collection 中那些也包含在指定 collection 中的所有元素。
指定者:
接口 Collection 中的 removeAll。
参数:
collection - 办好要从此 collection 移除的元素的 collection 。
返回:
如果此 collection 由于调用而发生更改,则返回 true 。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 removeAll 方法 。
ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不支持 null 元素,或者指定的 collection 为 null。
10、public boolean retainAll(Collection<?> collection)
有交集则返回true。
指定者:
接口 Collection 中的 retainAll。
参数:
collection - 包含保留在此 collection 中的元素的 collection。
返回:
如果此 collection 由于调用而发生更改,则返回 true。
抛出:
UnsupportedOperationException - 如果此 collection 不支持 retainAll 操作 。
ClassCastException - 如果此 collection 中一个或多个元素的类型与指定 collection 不兼容。
NullPointerException - 如果此 collection 包含一个或多个 null 元素,并且指定的 collection 不允许 null 元素,或者指定的 collection 为 null。
11、public abstract int size()
返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
12、public Object[ ] toArray()
返回包含此 collection 中所有元素的数组。
13、public T[ ] toArray(T[ ] contents)
返回包含此 collection 中所有元素的数组。
指定者:
接口 Collection 中的 toArray。
参数:
contents - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
返回:
包含此 collection 中所有元素的数组 。
抛出:
ArrayStoreException - 如果指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型 。
NullPointerException - 如果指定的数组为 null。
14、public String toString()
返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 ("[ ]") 括起来。相邻元素由字符 ", "(逗号加空格)分隔。
覆盖:
Object类中的 toString。
返回:
此 collection 的字符串表示形式。