java集合框架--集合接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daicooper/article/details/80851028

java 集合框架使程序处理集合数组的方法标准化。集合框架包含了一组标准的接口。对这些接口,提供了几个标准的实现工具(LinkedList、HashSet 和 TreeSet);

集合接口:

接口 描述
Collection 集合框架的顶层接口,定义了操作对象集合的共同方法
List 继承 Collection,表示有序的,可包括重复元素的列表
Set 继承 Collection,表示无序的,无重复元素的列表
SortSet 继承 Set,对Set中元素进行排序
Queue 继承 Collection,定义了队列数据结构的操作方式
Deque 继承了Queue,定义了双向队列数据结构的操作方式

集合接口类图如下:

这里写图片描述

Collection 接口

Collection 接口是构造集合框架的基础。它声明所有类集合都将拥有的核心方法。因为所有类集合实现 Collection,所以熟悉它的方法对于清楚地理解框架是必要的。

注意:其中几个方法可能会引发一个 UnsupportedOperationException 异常,这些发生在当类集合不能被修改时。当一个对象与另一个对象不兼容,例如,当企图增加一个不兼容的对象到一个集合中时,将产生一个ClassCastException异常。

Collection 定义的方法:

方法 描述
boolean add (Object obj) 将 obj加入到调用类集合中。如果Obj被加入到类集合中了,则返回 true,如果未能加入集合,则返回 false。
booleand addAll(Collection c) 将 c 中的所有元素都加入到类集合中,如果操作成功,则返回 true, 否则返回 false。
void clear() 从调用类集合中删除所有元素
boolean contains(Object obj) 如果 obj 是调用类集合中的一个元素,则返回 true,否则返回 false。
boolean containsAll(Collection c) 如果调用类集合包含了 c 中的所有元素,则返回 true,否则返回 false。
boolean equals(Object obj) 如果调用类集合与 obj相等,则返回 true,否则返回 false
int hashCode() 返回调用类集合的散列值
boolean isEmpty() 如果调用类集合时空的,则返回true,否则返回 false。
Iterator iterator() 返回调用类集合的迭代器
boolean remove(Object obj) 从调用类集合中删除 obj 的一个实例。如果这个元素被删除了,则返回 true,否则返回 false
boolean removeAll(Collection c) 从调用类集合中删除 c 的的所有元素。如果类集合被改变了(也就是说元素被删除了),则返回 true,否则返回 false
boolean retainAll(Collection c) 删除调用类集合中除了包含在 c 中的元素之外的所有元素。如果类集合被改变了(也就是说元素被删除了),则返回 true,否则返回 false
int size() 返回调用类集合中元素的个数
Object[] toArray() 返回一个数组,该数组包含了所有存储在调用类集合中的元素
Object[] toArray(Object array[]) 返回一个数组,该数组仅仅包含了那些类型与数组元素类型匹配的类集合元素。如果 array的大小与匹配元素的个数相等,则它们被返回到 array,如果 array 的大小比匹配元素的个数小,则将分配并返回一个所需大小的新数组;如果 array 的大小比匹配元素的个数大,在数组中,在类集合元素之后的单元被置为 null。如果任 一类集合元素的类型都不是 array 的子类型,则引发一个 ArrayStoreException异常

List接口

List接口继承了 Collection 并声明了类集的新特性。使用一个基于 零 的下标,元素可以通过他们在列表中的位置被插入和访问。一个列表可以包含重复元素。

处理 由 Collection 定义的方法之外,List 还定义了一些它自己的方法。注意:当类集合不能被修改时,其中的几种方法引发 UnsupportOperationException 异常当一个对象与另一个对象不兼容,例如,当企图增加一个不兼容的对象到一个类集中时,将产生一个ClassCastException异常。

List 定义的方法:

方法 描述
void add(int index, Object obj) 将 obj 加入到调用列表中。插入位置的下标由 index 传递。任何已存在的,在插入点以及插入点之后的元素将后移。因此,没有元素被覆盖
booleand addAll(int index, Collection c) 将 c 中的所有元素插入到调用列表中。插入位置的下标由 index 传递。任何已存在的,在插入点以及插入点之后的元素将后移。因此,没有元素被覆盖。如果调用列表改变了,则返回 true, 否则返回 false。
Object get(int index) 返回存储在调用类集内指定下标处的对象
int indexOf(Object obj) 返回调用列表中 obj 的第一个实例的下标。如果 obj 不是列表中的元素,则返回 -1
int lastIndexOf(Object obj) 返回调用列表中 obj 的最后一个实例的下标。如果 obj 不是列表中的元素,则返回 -1
ListIterator listIterator() 返回调用列表的迭代器
ListIterator listIterator(int index) 返回调用列表从指定下标处开始的迭代器
Object remove(int index) 删除调用列表中 index 位置的元素并返回删除的元素。删除后,列表被压缩。也就是说,被删除元素后面的元素向前移动
Object set(int index, Object obj) 用 obj对调用列表内由 index 指定的位置进行赋值
List subList(int start, int end) 返回一个列表,该列表包括了调用列表中从 start 到 end - 1 的元素

Set 和 sortSet 接口
set 接口定义了一个集合,它继承了 collection 并说明了不允许重复元素的类集的特性。因此,如果试图将仇富元素加到集合时, add() 方法将返回 false,它本身并没有定义任何附件的方法。

SortSet 接口继承了 Set 并说明了按升序排列的集合的特性。当没有元素包含在调用集合中时,其中的几种方法引发 NoSuchElementException 异常。当对象与集合中的元素不兼容时,引发 ClassCastException 异常。如果试图使用 null 对象,而集合不允许 null 时,将引发 NullPointerException 异常。

SortedSet定义的方法:

方法 描述
Comparator comparator() 返回排序集合的比较器,如果对该集合使用自然排序,则返回 null
Object first() 返回排序集合的第一个元素
SortSet headSet(Object end) 返回一个包含那些小于 end 的元素的 SortedSet
Object last() 返回排序集合的最后一个元素
SortSet subSet(Object start, Object end) 返回一个 SortedSet,它包括了 从 start 到 end-1 的元素
SortSet tailSet(Object start) 返回一个 SortedSet, 它包含了那些包含在类集合中的大于 等于 start 的元素

Queue 和 Deque 接口

Queue< E >接口(E表示集合元素的类型)扩展了 Collection 接口、定义了一个队列数据结构的操作方式。队列定义了一个 “头” 位置, 它是下一个将要被移除的元素。除了从 Collection 继承的操作外,还提供了 插入,提取和检查操作。每个方法都存在两种形式。一种 抛出异常(操作失败时),另一种返回一个特殊值(null 或 false ,具体取决于操作)。插入操作的一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败。

Queue定义的方法:

方法 描述
boolean add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true, 如果当前没有可用的空间,则抛出 IllegalStateException
boolean offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制)当使用有容量显得队列时,此方法通常要优于 add(E),或者可能无法插入元素,而只是抛出一个异常
E remove() 获取并移除此队列的头,如果此队列为空,则抛出一个异常
E poll() 获取并移除此队列的头,如果此队列为空,则返回 null
E element() 获取,但是不移除此队列的头,此队列为空时,将抛出一个异常
E peek() 获取,但是不移除此队列的头,此队列为空时,则返回 null

remove() 和 poll() 方法可移除 和返回队列的头。到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。 remove() 和 poll() 方法仅在队列为空时其行为有所不同,remove() 方法抛出一个异常,而 poll () 方法则返回 null。

element () 和 peek() 返回但不移除队列的头。

Queue 接口并未定义阻塞队列的方法,而这种情况在并发编程中是很常见的。
BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。

Queue 实现通常不允许插入null元素。尽管某些实现(如 LinkedList)并不禁止插入null.即使 在允许 null 的实现中,也不应该将 null 插入到 Queue 中。因为 null 也用做 poll 方法的一个特殊返回值,表明队列不包含元素。

Deque 定义了一个双端队列数据结构,支持在两端插入和移除元素。大多数Deque 实现对于他们能够包含的元素数有没固定的限制,但此接口即支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

此接口定义在双端队列两端访问元素的方法,提供插入,移除,和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值 (null 或是 false,具体取决于操作)。插入操作的后一种形式是转为使用容量限制的Deque实现设计的;在大多数实现中,插入操作不能失败。

Deque 定义的方法

Tables Are Cool
col 3 is right-aligned $1600

此接口扩展了 Queue 接口。在将双端队列用作队列时,将得到 FIFO (现金先出)行为。
将原始添加到双端队列的末尾,从双端队列的开头移除元素。
从Queue 接口继承的方法完全等效于 Deque 方法。
双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack l类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于Deque 方法。

虽然 Deque 实现没有严格要求禁止插入 null 元素,但 建议最好不要插入 null 元素。建议任何事实上允许 null 元素的 Deque 实现,用户最好不要利用插入 null 的功能。这是因为各种方法会将null用作特殊的返回值来指示双端队列为空

猜你喜欢

转载自blog.csdn.net/daicooper/article/details/80851028