Queue
PriorityQueue:Object[]数组来实现二叉堆
ArrayQueue:Object[]数组+双指针
Queue和Deque的区别
Queue是单端队列,只能从一端插入元素,另一端删除元素,实现了一般遵循先进先出(FIFO)规则。
Queue扩展了Collection的接口,根据因为容量问题导致操作失败后处理方式的不同可以分为两类方法:一种在操作失败后会抛出异常,另一种则会返回特殊值。
Queue接口 | 抛出异常 | 返回特殊值 |
---|---|---|
插入队尾 | add(E e) | offer(E e) |
删除队首 | remove() | poll() |
查询队首元素 | element() | peek() |
Deque是双端队列,在队列的两端均可以插入或删除元素。
Deque 扩展了 Queue 的接口, 增加了在队首和队尾进行插入和删除的方法,同样根据失败后处理方式的不同分为两类:
Deque 接口 | 抛出异常 | 返回特殊值 |
---|---|---|
插入队首 | addFirst(E e) | offerFirst(E e) |
插入队尾 | addLast(E e) | offerLast(E e) |
删除队首 | removeFirst() | pollFirst() |
删除队尾 | removeLast() | pollLast() |
查询队首元素 | getFirst() | peekFirst() |
查询队尾元素 | getLast() | peekLast() |
Deque 还提供有 push() 和 pop() 等其他方法,可用于模拟栈。
ArrayDeque和LinkedList的区别
ArrayDeque和LinkedList都实现了Deque接口,两者都均有队列的功能
ArrayDeque | LinkedList |
---|---|
基于可变长的数组和双指针实现 | 通过链表实现 |
不支持存储NULL数据 | 支持存储NULL数据 |
1.6引入 | 1.2引入 |
插入时可能存在扩容过程,均摊后的插入操作依然是O(1) | 不需要扩容,但是每次插入数据时需要申请新的堆空间,均摊性能相比更慢 |
性能更好 | – |
可用于实现栈 | – |