java集合框架--集合接口

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 定义的方法

TablesAreCool
col 3 isright-aligned$1600

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

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

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值