Java集合框架
Java中有关数据结构的类都在java.util包中,集合框架是每一个程序员都应该熟练掌握的一个类库。Java的集合框架可以提供处理对象的标准方式。在很早的jdk版本中,只提供了Dictionary、Vector、Stack、Properties来存储和操作对象。这些类之间没有统一的api,使用这些类达不到易扩展的作用。
当然我们使用这些数据结构目的也是为了使用方便,能够提供高效的存取。学过数据结构的朋友们都知道,链表和哈希表的结构的效率都是较高的。为了使用不同的集合之间能够相互操作,相互扩展,那么使用通用的接口将是一个较好的选择。所以整个集合框架被设计成了一系列的标准的接口。在Collections类中有许多静态的算法方法。Iterator迭代器接口提供了通用的访问集合元素的方式,因为每一个集合都实现了Iterator接口。除了集合,还提供了映射的接口和类。比方说Map就提供了存储键值对。虽然它不是集合,但也被整合到了集合中。目前所有的集合都是基于泛型的。
下面介绍集合框架中的几个常用的接口:
1.Collection 允许处理一组对象,位于集合层次结构的顶部
2.List 扩展Collection接口以处理序列
3.Queue 扩展Collection接口以处理列表中的特殊类型,其元素只能从前面删除
4.Set 扩展Collection接口以处理集合,集合中的元素必须是唯一的
5.SortedSet 扩展Set接口以处理排序的集合
当然除了上述的接口外,集合中还使用Copmarator、Iterator、ListIterator等接口 。
Collection接口是构造集合框架的基础,必须被定义集合的任意类实现,同样它也是一个泛型接口。
List接口:
该接口扩展了Collection接口,它声明集合是存储一个序列的元素。我们可以把它看成是动态数组。学过数据结构的朋友都知道,数组可以使用基于0的索引,对于泛型的List接口而言,他可以指定保存不同的对象类型。
相对于Collection接口而言,List接口增加了add(int index, E element),add(int index,Collection c)方法,这些方法用于将元素插入到特定的位置,这也是动态数组的特性。
Set接口:
该接口扩展了Collection接口,但不允许有相同的存在的元素,而上述的List接口却没有此约束,其实很好理解,我们可以把它想象成数学中的集合,在那种集合中,是不允许有相同的元素的。
SortedSet接口扩展了Set接口,此接口是升序的集合,由于是有序的,所有自然其中的数据元素是有意义的,否则升序的算法无从使用起。自然就不能存在为null的对象。下表是该接口特有的方法:
Queue接口:
这个接口在1.4的版本中是没有,新增的。看名字就知道是队列,先进先出。
从队列顶部删除元素 。
当然我们使用这些数据结构目的也是为了使用方便,能够提供高效的存取。学过数据结构的朋友们都知道,链表和哈希表的结构的效率都是较高的。为了使用不同的集合之间能够相互操作,相互扩展,那么使用通用的接口将是一个较好的选择。所以整个集合框架被设计成了一系列的标准的接口。在Collections类中有许多静态的算法方法。Iterator迭代器接口提供了通用的访问集合元素的方式,因为每一个集合都实现了Iterator接口。除了集合,还提供了映射的接口和类。比方说Map就提供了存储键值对。虽然它不是集合,但也被整合到了集合中。目前所有的集合都是基于泛型的。
下面介绍集合框架中的几个常用的接口:
1.Collection 允许处理一组对象,位于集合层次结构的顶部
2.List 扩展Collection接口以处理序列
3.Queue 扩展Collection接口以处理列表中的特殊类型,其元素只能从前面删除
4.Set 扩展Collection接口以处理集合,集合中的元素必须是唯一的
5.SortedSet 扩展Set接口以处理排序的集合
当然除了上述的接口外,集合中还使用Copmarator、Iterator、ListIterator等接口 。
Collection接口是构造集合框架的基础,必须被定义集合的任意类实现,同样它也是一个泛型接口。
方法摘要 | ||
---|---|---|
boolean |
add(E o) 确保此 collection 包含指定的元素(可选操作)。 |
|
boolean |
addAll(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 |
|
void |
clear() 移除此 collection 中的所有元素(可选操作)。 |
|
boolean |
contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 |
|
boolean |
containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 |
|
boolean |
equals(Object o) 比较此 collection 与指定对象是否相等。 |
|
int |
hashCode() 返回此 collection 的哈希码值。 |
|
boolean |
isEmpty() 如果此 collection 不包含元素,则返回 true。 |
|
Iterator<E> |
iterator() 返回在此 collection 的元素上进行迭代的迭代器。 |
|
boolean |
remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 |
|
boolean |
removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 |
|
boolean |
retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 |
|
int |
size() 返回此 collection 中的元素数。 |
|
Object[] |
toArray() 返回包含此 collection 中所有元素的数组。 |
|
|
toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 |
该接口扩展了Collection接口,它声明集合是存储一个序列的元素。我们可以把它看成是动态数组。学过数据结构的朋友都知道,数组可以使用基于0的索引,对于泛型的List接口而言,他可以指定保存不同的对象类型。
方法摘要 | ||
---|---|---|
boolean |
add(E o) 向列表的尾部追加指定的元素(可选操作)。 |
|
void |
add(int index, E element) 在列表的指定位置插入指定元素(可选操作)。 |
|
boolean |
addAll(Collection<? extends E> c) 追加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。 |
|
boolean |
addAll(int index, Collection<? extends E> c) 将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。 |
|
void |
clear() 从列表中移除所有元素(可选操作)。 |
|
boolean |
contains(Object o) 如果列表包含指定的元素,则返回 true。 |
|
boolean |
containsAll(Collection<?> c) 如果列表包含指定 collection 的所有元素,则返回 true。 |
|
boolean |
equals(Object o) 比较指定的对象与列表是否相等。 |
|
E |
get(int index) 返回列表中指定位置的元素。 |
|
int |
hashCode() 返回列表的哈希码值。 |
|
int |
indexOf(Object o) 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1。 |
|
boolean |
isEmpty() 如果列表不包含元素,则返回 true。 |
|
Iterator<E> |
iterator() 返回以正确顺序在列表的元素上进行迭代的迭代器。 |
|
int |
lastIndexOf(Object o) 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1。 |
|
ListIterator<E> |
listIterator() 返回列表中元素的列表迭代器(以正确的顺序)。 |
|
ListIterator<E> |
listIterator(int index) 返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始。 |
|
E |
remove(int index) 移除列表中指定位置的元素(可选操作)。 |
|
boolean |
remove(Object o) 移除列表中出现的首个指定元素(可选操作)。 |
|
boolean |
removeAll(Collection<?> c) 从列表中移除指定 collection 中包含的所有元素(可选操作)。 |
|
boolean |
retainAll(Collection<?> c) 仅在列表中保留指定 collection 中所包含的元素(可选操作)。 |
|
E |
set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作)。 |
|
int |
size() 返回列表中的元素数。 |
|
List<E> |
subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 |
|
Object[] |
toArray() 返回以正确顺序包含列表中的所有元素的数组。 |
|
|
toArray(T[] a) 返回以正确顺序包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。 |
Set接口:
该接口扩展了Collection接口,但不允许有相同的存在的元素,而上述的List接口却没有此约束,其实很好理解,我们可以把它想象成数学中的集合,在那种集合中,是不允许有相同的元素的。
SortedSet接口扩展了Set接口,此接口是升序的集合,由于是有序的,所有自然其中的数据元素是有意义的,否则升序的算法无从使用起。自然就不能存在为null的对象。下表是该接口特有的方法:
方法摘要 | |
---|---|
Comparator<? super E> |
comparator() 返回与此有序集合关联的比较器,如果使用元素的自然顺序,则返回 null。 |
E |
first() 返回此有序集合中当前第一个(最小的)元素。 |
SortedSet<E> |
headSet(E toElement) 返回此有序集合的部分视图,其元素严格小于 toElement。 |
E |
last() 返回此有序集合中最后一个(最大的)元素。 |
SortedSet<E> |
subSet(E fromElement, E toElement) 返回此有序集合的部分视图,元素范围从 fromElement(包括)到 toElement(不包括)。 |
SortedSet<E> |
tailSet(E fromElement) 返回此有序集合的部分视图,其元素大于或等于 fromElement。 |
这个接口在1.4的版本中是没有,新增的。看名字就知道是队列,先进先出。
方法摘要 | |
---|---|
E |
element() 检索,但是不移除此队列的头。 |
boolean |
offer(E o) 如果可能,将指定的元素插入此队列。 |
E |
peek() 检索,但是不移除此队列的头,如果此队列为空,则返回 null。 |
E |
poll() 检索并移除此队列的头,如果此队列为空,则返回 null。 |
E |
remove() 检索并移除此队列的头。 |