栈与队列基础篇(二)--Deque

结合栈与队列,请详细说一下Deque都有什么方法:

Deque 接口(Double Ended Queue,双端队列)提供了一系列方法,既可以用作栈,也可以用作队列。下面是 Deque 接口中常用的方法:

  1. 操作方法:

    • void push(E e): 将元素推入栈顶。
    • E pop(): 弹出栈顶元素,并将其从栈中移除。
    • E peek(): 获取栈顶元素,但不移除它。
  2. 队列操作方法:

    • void addFirst(E e): 将元素插入到队列的开头
    • void addLast(E e): 将元素插入到队列的末尾。
    • boolean offerFirst(E e): 将元素插入到队列的开头,如果成功则返回 true。
    • boolean offerLast(E e): 将元素插入到队列的末尾,如果成功则返回 true。
    • E removeFirst(): 移除并返回队列开头的元素。
    • E removeLast(): 移除并返回队列末尾的元素。
    • E pollFirst(): 移除并返回队列开头的元素,如果队列为空则返回 null。
    • E pollLast(): 移除并返回队列末尾的元素,如果队列为空则返回 null。
    • E getFirst(): 获取队列开头的元素,但不移除它。
    • E getLast(): 获取队列末尾的元素,但不移除它。
    • E peekFirst(): 获取队列开头的元素,如果队列为空则返回 null。
    • E peekLast(): 获取队列末尾的元素,如果队列为空则返回 null。
  3. 其他常用方法:

    • boolean isEmpty(): 判断队列是否为空
    • int size(): 返回队列中的元素数量。
    • void clear(): 清空队列中的所有元素。

这些方法允许你在 Deque 对象上实现栈和队列的操作。你可以根据需要选择合适的方法来实现特定的功能。

需要注意的是,Deque 是一个接口,它有多个具体实现类,例如 ArrayDeque 和 LinkedList。你可以根据实际需求选择适合的实现类来创建 Deque 对象。

 

ArrayDeque<Integer> 是 Deque<Integer> 的一个具体实现类。它提供了双端队列的功能,并使用数组作为内部数据结构。

由于之前出现了混淆,以下是正确的区别:

  1. 继承关系:ArrayDeque<Integer> 实现了 Deque<Integer> 接口。因此,它支持 Deque 接口中定义的所有方法,包括栈和队列的操作。

  2. 内部数据结构:ArrayDeque<Integer> 使用循环数组(circular array)作为内部数据结构。这种数据结构允许在两端进行高效的插入和删除操作,使其既可以用作栈,也可以用作队列。

  3. 动态扩容:ArrayDeque<Integer> 的内部数组会根据需要进行动态扩容,以容纳更多的元素。它具有自动调整容量的能力,可以根据实际需求进行扩展,而不受固定容量的限制。

  4. 线程安全性:ArrayDeque<Integer> 不是线程安全的,它不提供多线程并发访问的保护机制。如果在多线程环境中使用 ArrayDeque<Integer>,需要采取适当的同步措施来确保线程安全性。

因此,ArrayDeque<Integer> 是 Deque<Integer> 接口的一个具体实现类,它使用循环数组作为内部数据结构,提供了双端队列的功能。你可以使用 ArrayDeque<Integer> 来创建一个双端队列,并根据需要执行栈和队列的操作。

posted @ 2024-03-27 16:41  翻斗花园小美Q  阅读(141)  评论(0)    收藏  举报