Java集合之Queue和Deque接口

本文详细介绍了Java集合框架中的队列(Queue)和双端队列(Deque)接口,阐述了它们的主要方法及应用场景,包括如何添加、删除和检索元素。
public interface Queue<E> extends Collection<E> {//队列  JDK1.7  java.util
    //一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。此时add会抛出异常;offer会返回false
	boolean add(E e);//将指定的元素插入此队列
    boolean offer(E e);//将指定的元素插入此队列
    E remove();//获取并移除此队列的头;如果此队列为空,则抛出异常。
    E poll();//获取并移除此队列的头,如果此队列为空,则返回 null。
    E element();//获取,但是不移除此队列的头;如果此队列为空,则抛出异常。
    E peek();//获取但不移除此队列的头;如果此队列为空,则返回 null。
}
public interface Deque<E> extends Queue<E> {//继承自Queue接口并进行扩展,支持双端操作
    void addFirst(E e);//将指定元素插入此双端队列的开头。如果此队列有容量限制且当前没有可用空间,则抛出异常
    void addLast(E e);//将指定元素插入此双端队列的末尾。如果此队列有容量限制且当前没有可用空间,则抛出异常
    boolean offerFirst(E e);//将指定的元素插入此双端队列的开头。如果此队列有容量限制且当前没有可用空间,false
    boolean offerLast(E e);//将指定的元素插入此双端队列的末尾。如果此队列有容量限制且当前没有可用空间,false
    E removeFirst();//获取并移除此双端队列第一个元素;如果此队列为空,则抛出异常。
    E removeLast();//获取并移除此双端队列最后一个元素;如果此队列为空,则抛出异常。
    E pollFirst();//获取并移除此双端队列第一个元素;如果此队列为空,则返回 null。
    E pollLast();//获取并移除此双端队列最后一个元素;如果此队列为空,则返回 null。
    E getFirst();//获取但不移除此队列的头;如果此队列为空,则抛出异常。
    E getLast();//获取但不移除此双端队列最后一个元素;如果此队列为空,则抛出异常
    E peekFirst();//获取但不移除此队列的头;如果此队列为空,则返回 null。
    E peekLast();//获取但不移除此队列的头;如果此队列为空,则返回 null。
    boolean removeFirstOccurrence(Object o);//从此双端队列移除第一次出现的指定元素。如果此双端队列不包含该元素,则不作更改
    boolean removeLastOccurrence(Object o);//从此双端队列移除最后一次出现的指定元素。如果此双端队列不包含该元素,则不作更改
    boolean add(E e);//等效于addLast
    boolean offer(E e);//等效于offerLast
    E remove();//等效于 removeFirst()。 
    E poll();//此方法等效于 pollFirst()。 
    E element();//此方法等效于 getFirst()。
    E peek();//此方法等效于 peekFirst()。
    void push(E e);//此方法等效于 addFirst(E)。
    E pop();//此方法等效于 removeFirst()。
    boolean remove(Object o);//此方法等效于 removeFirstOccurrence(java.lang.Object)。
    boolean contains(Object o);//如果此双端队列包含指定元素,则返回 true
    public int size();//返回此双端队列的元素数。
    Iterator<E> iterator();//返回以恰当顺序在此双端队列的元素上进行迭代的迭代器
    Iterator<E> descendingIterator();//返回以逆向顺序在此双端队列的元素上进行迭代的迭代器

}

### Java Deque 接口概述 `Deque` 是双端队列(Double Ended Queue)的缩写,在 Java 集合框架中提供了线程安全非线程安全两种版本。此接口继承自 `Queue` 接口并扩展了功能,允许在两端进行插入、移除访问元素操作。 ### 创建与初始化 Deque 实例 通常情况下会使用具体的实现类来实例化 `Deque` 对象: ```java // 使用 ArrayDeque 或 LinkedList 来创建 Deque 的具体对象 Deque<String> deque = new ArrayDeque<>(); Deque<Integer> integerDeque = new LinkedList<>(); ``` ### 基本操作方法 #### 添加元素 - **addFirst(E e)** **offerFirst(E e)**:向头部添加指定元素;当无法成功添加时抛出异常或返回 false。 - **addLast(E e)** **offerLast(E e)**:向尾部添加指定元素;同上逻辑。 ```java deque.addFirst("first element"); integerDeque.offerLast(10); ``` #### 移除元素 - **removeFirst()** **pollFirst()**: 获取并移除第一个元素; 当为空时分别抛出 NoSuchElementException 或者返回 null. - **removeLast()** **pollLast()**: 类似于前者但是作用于最后一个元素. ```java String firstElement = deque.removeFirst(); Integer lastElementOrNull = integerDeque.pollLast(); ``` #### 访问元素而不移除它们 - **getFirst()**, **peekFirst()** - **getLast()**, **peekLast()** 这些方法用于获取最前端/末端的数据项而不会将其删除: ```java System.out.println(deque.peekFirst()); // 输出 "first element" System.out.println(integerDeque.getLast()); // 输出最后加入的那个整数 ``` ### 迭代遍历 Deque 可以通过迭代器或者增强型for循环来进行遍历: ```java Iterator<String> iterator = deque.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } for(String item : deque){ System.out.println(item); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值