2021-04-18 11:19  阅读(65)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-collections-traversing.html

Java集合教程 - Java双端队列

双端队列或deque扩展队列以允许元件从两端插入和移除。

Deque类的实例表示双端队列。Deque接口扩展了Queue接口。

它声明了方便所有操作的其他方法对于头部以及尾部的队列。它可以用作FIFO队列或LIFO队列。

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

ArrayDeque类由数组支持,而LinkedList类由链表支持。

如果您使用Deque作为堆栈,则应该使用ArrayDeque作为Deque实现。

如果使用Deque作为FIFO队列,LinkedList

以下代码显示如何使用Deque作为FIFO队列。

    import java.util.Deque;
    import java.util.LinkedList;
    
    public class Main {
      public static void main(String[] args) {
        Deque<String> deque = new LinkedList<>();
        deque.addLast("Oracle");
        deque.offerLast("Java");
        deque.offerLast("CSS");
        deque.offerLast("XML");
    
        System.out.println("Deque: " + deque);
    
        // remove elements from the Deque until it is empty
        while (deque.peekFirst() != null) {
          System.out.println("Head  Element: " + deque.peekFirst());
          deque.removeFirst();
          System.out.println("Removed one  element from  Deque");
          System.out.println("Deque: " + deque);
        }
    
        // the Deque is empty. Try to call its peekFirst(),
        // getFirst(), pollFirst() and removeFirst() methods
        System.out.println("deque.isEmpty(): " + deque.isEmpty());
    
        System.out.println("deque.peekFirst(): " + deque.peekFirst());
        System.out.println("deque.pollFirst(): " + deque.pollFirst());
    
        String str = deque.getFirst();
        System.out.println("deque.getFirst(): " + str);
        str = deque.removeFirst();
        System.out.println("deque.removeFirst(): " + str);
    
      }
    }
    

上面的代码生成以下结果。

202104181111117_1.png

例子

以下代码显示如何使用Deque作为堆栈(或LIFO队列)。

    import java.util.ArrayDeque;
    import java.util.Deque;
    
    public class Main {
      public static void main(String[] args) {
        // Create a Deque and use it as stack
        Deque<String> deque = new ArrayDeque<>();
        deque.push("Oracle");
        deque.push("HTML");
        deque.push("CSS");
        deque.push("XML");
    
        System.out.println("Stack: " + deque);
    
        // remove all elements from the Deque
        while (deque.peek() != null) {
          System.out.println("Element at  top:  " + deque.peek());
          System.out.println("Popped: " + deque.pop());
          System.out.println("Stack: " + deque);
        }
    
        System.out.println("Stack is  empty:  " + deque.isEmpty());
      }
    }
    

上面的代码生成以下结果。

2021041811119_2.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 双端队列
上一篇
Java 优先级队列
下一篇
Java 特殊队列