Java双端队列


*Java双端队列的知识

Deque 接口是 double ended queue 的缩写,即双端队列,支持在队列的两端插入和删除元素,继承 Queue接口。
public interface Deque extends Queue

Deque 的 12 种方法总结如下:

  • 插入:
    • 如果操作失败则抛出异常
      • void addFirst(Object e)
      • void addLast(Object e)
    • 如果操作失败则返回一个特殊值(null 或 false)
      • boolean offerFirst(Object e)
      • boolean offerLast(Object e);
  • 删除:
    • 如果操作失败则抛出异常
      • Object removeFirst()
      • Object removeLast()
    • 如果操作失败则返回一个特殊值(null 或 false)
      • Object pollFirst()
      • Object pollLast()
  • 获取:
    • 如果操作失败则抛出异常
      • Object getFirst()
      • Object getLast()
    • 如果操作失败则返回一个特殊值(null 或 false)
      • Object peekFirst()
      • Object peekLast()

Deque 与 List 不同,该接口不支持下标访问元素。Deque 的实现并不严格要求禁止插入元素 null,但强烈鼓励不插入 null。任何 Deque 的实现都强烈鼓励不要插入 null,因为 null 是多种方法作为一种特殊返回值来表示 Deque 为空。

ArrayDeque 和 LinkedList 类是 Deque 接口的两个实现类:

  • ArrayDeque 类由数组支持。适合当作堆栈使用。
  • LinkedList 类由链表支持。适合当作FIFO队列使用。

*代码

import java.util.Deque; import java.util.LinkedList; 
public class DequeTest { 
    public static void main(String[] args) { Deque<String> deque = new LinkedList<String>(); deque.add("d"); deque.add("e"); deque.add("f"); //从队首取出元素,不会删除
        System.out.println("队首取出元素:"+deque.peek()); System.out.println("队列为:"+deque); //从队首加入元素(队列有容量限制时用,无则用addFirst)
        deque.offerFirst("c"); System.out.println("队首加入元素后为:"+deque); //从队尾加入元素(队列有容量限制时用,无则用addLast)
        deque.offerLast("g"); System.out.println("队尾加入元素后为:"+deque); //队尾加入元素
        deque.offer("h"); System.out.println("队尾加入元素后为:"+deque); //获取并移除队列第一个元素,pollFirst()也是,区别在于队列为空时,removeFirst会抛出NoSuchElementException异常,后者返回null
 deque.removeFirst(); System.out.println("获取并移除队列第一个元素后为:"+deque); //获取并移除队列第一个元素,此方法与pollLast 唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null
 deque.removeLast(); System.out.println("获取并移除队列最后一个元素后为:"+deque); //获取队列第一个元素.此方法与 peekFirst 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
        System.out.println("获取队列第一个元素为:"+deque.getFirst()); System.out.println("获取队列第一个元素后为:"+deque); //获取队列最后一个元素.此方法与 peekLast 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
        System.out.println("获取队列最后一个元素为:"+deque.getLast()); System.out.println("获取队列第一个元素后为:"+deque); //循环获取元素并在队列移除元素
        while(deque.size()>0){ System.out.println("获取元素为:"+ deque.pop()+" 并删除"); } System.out.println("队列为:"+deque); } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM