说一下 ArrayDeque 和 LinkedList 的区别?
大家好,我是小彭。
在上一篇文章里,我们聊到了基于链表的 Queue 和 Stack 实现 —— LinkedList。那么 Java 中有没有基于数组的 Queue 和 Stack 实现呢?今天我们就来聊聊这个话题。
小彭的 Android 交流群 02 群已经建立啦,扫描文末二维码进入~
思维导图:
1. 回顾 LinkedList
在数据结构上,LinkedList 不仅实现了与 ArrayList 相同的 List 接口,还实现了 Deque 接口,而我们今天要讲的 ArrayDeque 就是实现于 Deque 接口的动态数组。
Deque 接口表示一个双端队列(Double Ended Queue),允许在队列的首尾两端操作,所以既能实现队列行为,也能实现栈行为。
1.1 Queue 接口
Queue 的 API 可以分为 2 类,区别在于方法的拒绝策略上:
- 抛异常:
- 向空队列取数据,会抛出 NoSuchElementException 异常;
- 向容量满的队列加数据,会抛出 IllegalStateException 异常。
- 返回特殊值:
- 向空队列取数据,会返回 null;
- 向容量满的队列加数据,会返回 false。
拒绝策略 | 抛异常 | 返回特殊值 |
---|---|---|
入队(队尾) | add(e) | offer(e) |
出队(队头) | remove() | poll() |
观察(队头) | element() | peek() |
相关文章