说一下 ArrayDeque 和 LinkedList 的区别?

2022-11-24 00:00:00 元素 队列 数组 指针 复杂度

大家好,我是小彭。

在上一篇文章里,我们聊到了基于链表的 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()

相关文章