Java中的集合体系
一、集合接口
Collection:这是集合的根接口,定义了集合的基本操作,如添加、删除、遍历等。
-
Set:继承自Collection,不允许包含重复元素。
-
List:继承自Collection,允许包含重复元素,并且元素是有序的。
-
Queue:继承自Collection,用于实现队列数据结构,支持先进先出(FIFO)的操作。
队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除; Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。因此,我们可以理解为 LinkedList 就是一个队列;
Java队列继承图:
队列常用方法
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
drainTo(list) 一次性取出队列所有元素非阻塞队列
1、ConcurrentLinkedQueue
单向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全,内部基于节点实现2、ConcurrentLinkedDeque
双向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全3、PriorityQueue
内部基于数组实现,线程不安全的队列阻塞队列
1、DelayQueue
一个支持延时获取元素的无界阻塞队列2、LinkedTransferQueue
一个由链表结构组成的无界阻塞队列。3、ArrayBlockingQueue
有界队列,阻塞式,初始化时必须指定队列大小,且不可改变;,底层由数组实现;4、SynchronousQueue
最多只能存储一个元素,每一个put操作必须等待一个take操作,否则不能继续添加元素5、PriorityBlockingQueue
一个带优先级的队列,而不是先进先出队列。元素按优先级顺序被移除,而且它也是无界的,也就是没有容量上限,虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError 错误;
-
Deque:继承自Queue,用于实现双端队列数据结构,支持在队列的两端进行插入和删除操作。
ArrayDeque:实现了Deque接口,使用数组实现,支持在队列的两端进行插入和删除操作。
public static void main(String[] args) {
Deque deque = new ArrayDeque();
deque.add("1");
deque.add("2");
deque.add("3");
//再队首插入数据
deque.addFirst("0");
//再队尾插入数据
deque.addLast("4");
System.out.println("初始数据:"+deque);
//获取队首数据
Object peekFirst = deque.peekFirst();
System.out.println("获取队首数据:"+peekFirst);
//获取队尾数据
Object peekLast = deque.peekLast();
System.out.println("获取队尾数据:"+peekLast);
//移除队首数据
Object pollFirst = deque.pollFirst();
System.out.println("移除队首数据:"+pollFirst);
//移除队尾数据
Object pollLast = deque.pollLast();
System.out.println("移除队尾数据:"+pollLast);
System.out.println(deque);
}
响应结果:
二、集合实现类
- ArrayList:实现了List接口,使用数组实现,支持快速随机访问,但在插入和删除元素时效率较低。
- LinkedList:实现了List接口,使用双向链表实现,在插入和删除元素时效率较高,但随机访问效率较低。
- HashSet:实现了Set接口,使用哈希表实现,不允许包含重复元素,并且元素是无序的。
- TreeSet:实现了Set接口,使用红黑树实现,不允许包含重复元素,并且元素是有序的。
- PriorityQueue:实现了Queue接口,使用堆实现,支持优先级队列。
- ArrayDeque:实现了Deque接口,使用数组实现,支持在队列的两端进行插入和删除操作。
三、映射接口:
- Map:定义了键值对的映射关系,每个键只能映射到一个值。
四、映射实现类:
- HashMap:实现了Map接口,使用哈希表实现,不保证键值对的顺序,允许一个键为null。
- TreeMap:实现了Map接口,使用红黑树实现,保证键值对的顺序,不允许键为null。
- LinkedHashMap:实现了Map接口,使用哈希表和双向链表实现,保证键值对的插入顺序,允许一个键为null。
- Hashtable:实现了Map接口,使用哈希表实现,不保证键值对的顺序,不允许键或值为null。