Collection API的使用
Collection API的使用
集合类库的整体框架
Java中集合框架顶层框架是:Java.util.Collection集合和Java.util.Map集合

Collection集合
java.util.Collection接口是List接口,Queue接口以及Set接口的父接口,因此该接口里定义的方法即可用于操作List集合,也可用于操作Queue集合和Set集合
| 方法声明 | 功能 |
|---|---|
| boolean add(E e) | 向集合中添加对象 |
| boolean addAll(Collection<? extends E> c) | 用于将参数指定集合中的所有元素添加到当前集合中 |
| boolean contains(Object o) | 判断是否包含指定对象 |
| boolean containsAll(Collection<?> c) | 判断是否包含参数指定的所有对象 |
| boolean retainAll(Collection<?> c) | 保留当前集合中存在且参数集合中存在的所有对象 |
| boolean remove(Object o) | 从集合中删除对象 |
| boolean removeAll(Collection<?> c) | 从集合中删除参数指定的所有对象 |
| void clear() | 清空集合 |
| int size() | 返回包含对象的个数 |
| boolean isEmpty() | 判断是否为空 |
| Object[] toArray() | 将集合转换为数组 |
| iterator iterator() | 获取当前集合的迭代器 |
Iterator接口
java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素
java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭代器对象
| 方法声明 | 功能 |
|---|---|
| boolean hasNext() | 判断集合中是否有可以迭代访问的元素 |
| E next() | 用于取出一个元素并指向下一个元素 |
| void remove | 用于删除访问到的最后一个元素 |
List集合
java.util.List集合是Collection集合的子集合,该集合允许拥有重复元素并且有先后放入次序。而Collection集合没有先后之分,可放入重复元素
该集合的主要实现类有:ArrayList类,LinkedList类,Stack类,Vector类。
其中ArrayList类的低层是采用动态数组进行数据管理的,支持下标访问,元素增删不方便
其中LinkedList类的低层是采用双向链表进行数据管理的,访问不方便,增删元素方便
可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别
常用方法
| 方法声明 | 功能 |
|---|---|
| void add(int index,E element) | 向集合中指定位置添加元素 |
| boolean addAll(int index,Collection<? extends E> c) | 向集合中添加所有元素 |
| E get(index) | 从集合中获取指定位置元素 |
| int indexOf(Object o) | 查找参数指定对象 |
| int lastIndexOf(Object 0) | 反向查找参数指定的对象 |
| E set(int index, E element) | 修改指定位置元素 |
| E remove(int index) | 删除指定位置元素 |
| List SubList(int fromIndex,int toIndex) | 获取子List |
Stack类
Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做栈
| 方法声明 | 功能 |
|---|---|
| isEmpty() | 判断栈是否为空 |
| push(E e) | 将元素入栈 |
| pop() | 将元素出栈 |
| peer | 返回栈顶元素 |
Queue
java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系
该集合主要用于描述具有先进先出特征的数据结构,叫做队列
该集合的主要实现类是LinkedList类,因为该类在增啥方面比较有优势
| 方法声明 | 功能 |
|---|---|
| boolean offer(E e) | 将一个对象添加至队尾,若添加成功则返回True |
| E poll() | 从队首删除并返回一个元素 |
| E peek() | 返回队首的元素(并不删除) |
Deque
定义:双向队列,支持插入删除元素的线性集合
java官方文档推荐用deque实现栈(stack)
和Queue的区别
Deque是double ended queue,将其理解为双端结束的队列,双端对列,可以在首尾插入或删除元素
特点
- 插入、删除、获取操作支持两种形式:快速失败和返回null或true/false
- 既具有FIFO特点又具有LIFO特点,既是队列又是栈
- 不推荐插入null元素,null作为特定返回值表示队列为空
- 未定义基于元素相等的equals和hashCode
实现
ArrayDeque : 基于数组实现的线性双向队列,通常作为栈或队列使用,但是栈的效率不如LikedList高。
LinkedList:基于链表实现的链式双向队列,通常作为栈或队列使用,但是队列的效率不如ArrayQueue高。
方法分析
| 方法名称 | 功能 |
|---|---|
| addFirst() | 向队头插入元素,如果元素为空,发生NPE(空指针异常) |
| addLast() | 向队尾插入元素,如果为空则发生NPE |
| offerFirst() | 向队头插入元素,插入成功返回true,失败返回false |
| offerLast() | 向队尾插入元素,插入成功返回true,失败返回false |
| removeLast() | 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException |
| removeFirst() | 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException |
| pollFirst() | 返回并移除队头元素,如果队列无元素,则返回null |
| pollLast() | 返回并移除队尾元素,如果队列无元素,则返回null |
| getFirst() | 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException |
| getLast() | 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException |
| peekFirst() | 获取队头元素但不移除,如果队列无元素,则返回null |
| peekLast() | 获取队尾元素但不移除,如果队列无元素,则返回null |
| pop() | 弹出栈元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException |
| push() | 向栈中压入元素,也就是向队头增加元素,等价于addFirst(), 如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException |
Set集合
Set继承于Collection接口,是一个不允许出现重复元素,且无序的集合,主要有HashSet和TreeSet两大实现类。在判断重复元素的时候,Set集合会调用hashCode(),和equals()方法来实现
区别:
- HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置。
- TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序。
set常用方法
| 方法 | 功能 |
|---|---|
| boolean add() | 添加元素 |
| boolean addAll() | 添加多个元素 |
| boolean remove() | 移除元素 |
| boolean removeAll() | 移除多个元素 |
| void clear() | 清空集合 |
| int size() | 求集合长度 |
| boolean isEmpty() | 判断是否为空 |
| boolean contains() | 判断是否包含 |
| boolean containsAll() | 判断是否包含全部 |
| boolean retainAll() | 判断是否包含全部 |
| Iterator<> iterator() | 获取集合迭代器 |
| toArray() | 集合转换为数组 |
| boolean equals() | 判断是否相等 |
| int hashCode(0) | 求hash值 |
HashSet
特点:
- 不允许出现重复元素
- 允许插入null值
- 元素无序(添加顺序和遍历顺序不一样)
- 线程不安全,若两个线程同时操作HashSet,必须通过代码实现同步
基本操作
| 方法 | 功能 |
|---|---|
| add() | 添加元素 |
| remove() | 移除元素 |
| clear() | 清空集合 |
| isEmpty() | 是否为空 |
| isContains | 是否包含指定元素 |
| iterator() | 迭代器 |
TreeSet
特点:
- 对插入的元素进行排序,是一个有序的集合
- 底层使用红黑树结构
- 允许插入null值
- 不允许插入重复元素
- 线程不安全
基本操作
| 方法 | 功能 |
|---|---|
| add() | 添加元素 |
| iterator() | 升序迭代器 |
| descendingIterator() | 降序迭代器 |
| first() | 获取头节点 |
| headSet() | 获取指定元素之前的元素集合,不包含指定元素 |
| subSet() | 获取给定元素之间的集合,包含头不包含尾 |
| isEmpty() | 判断是否为空 |
| isContain() | 判断是否包含指定元素 |
| remove() | 移除指定元素 |
| pollFirst() | 删除并返回第一个元素 |
| pollLast() | 删除并返回最后一个元素 |
| clear() | 清空集合 |
浙公网安备 33010602011771号