Java Deque接口

Deque接口位于java.util包中,它是Queue接口的子类型。Deque支持从数据结构的两端添加和删除元素,因此可以用作栈或队列。栈支持后进先出(LIFO)操作,队列支持先进先出(FIFO)操作,而Deque既可以支持栈操作,也可以支持队列操作。Deque是双端队列的缩写。

Deque接口声明

  1. public interface Deque<E> extends Queue<E>

Java Deque接口的方法

方法描述
boolean add(object)将指定元素插入此双端队列的尾部,并在成功时返回true。
boolean offer(object)将指定元素插入此双端队列的尾部。
Object remove()检索并删除此双端队列的头部。
Object poll()检索并删除此双端队列的头部,如果此双端队列为空,则返回null。
Object element()检索但不删除此双端队列的头部。
Object peek()检索但不删除此双端队列的头部,如果此双端队列为空,则返回null。
Object peekFirst()返回双端队列的头部元素,如果双端队列为空,则返回null。不会删除双端队列中的任何元素。
Object peekLast()返回双端队列的尾部元素,如果双端队列为空,则返回null。不会删除双端队列中的任何元素。
boolean offerFirst(e)在双端队列的前端插入元素e。如果插入成功,则返回true;否则返回false。
boolean offerLast(e)在双端队列的尾端插入元素e。如果插入成功,则返回true;否则返回false。

java arraydeque hierarchy

ArrayDeque类

我们知道,在Java中无法创建接口的对象。因此,要进行实例化,我们需要一个实现了Deque接口的类,而这个类就是ArrayDeque。ArrayDeque根据使用情况动态地增长和收缩。它还继承了AbstractCollection类。

ArrayDeque类的一些重要点如下:

  • 与Queue不同,我们可以从两端添加或删除元素。
  • ArrayDeque不允许空元素。
  • 在没有外部同步的情况下,ArrayDeque不是线程安全的。
  • ArrayDeque没有容量限制。
  • ArrayDeque比LinkedList和Stack更快。

ArrayDeque层次结构

ArrayDeque类的层次结构如图所示。

ArrayDeque类声明

让我们看一下java.util.ArrayDeque类的声明。

public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable

Java ArrayDeque示例

文件名:ArrayDequeExample.java

import java.util.*;

public class ArrayDequeExample {
   public static void main(String[] args) {
      // 创建Deque并添加元素
      Deque<String> deque = new ArrayDeque<String>();
      deque.add("Ravi");
      deque.add("Vijay");
      deque.add("Ajay");

      // 遍历元素
      for (String str : deque) {
         System.out.println(str);
      }
   }
}

输出:

Ravi
Vijay
Ajay

Java ArrayDeque示例:offerFirst()和pollLast()

文件名:DequeExample.java

import java.util.*;

public class DequeExample {
   public static void main(String[] args) {
      Deque<String> deque = new ArrayDeque<String>();
      deque.offer("arvind");
      deque.offer("vimal");
      deque.add("mukul");
      deque.offerFirst("jai");

      System.out.println("After offerFirst Traversal...");
      for (String s : deque) {
         System.out.println(s);
      }

      deque.pollLast();

      System.out.println("After pollLast() Traversal...");
      for (String s : deque) {
         System.out.println(s);
      }
   }
}

输出:

After offerFirst Traversal...
jai
arvind
vimal
mukul
After pollLast() Traversal...
jai
arvind
vimal

Java ArrayDeque示例:Book

文件名:ArrayDequeExample.java

import java.util.*;

class Book {
   int id;
   String name, author, publisher;
   int quantity;

   public Book(int id, String name, String author, String publisher, int quantity) {
      this.id = id;
      this.name = name;
      this.author = author;
      this.publisher = publisher;
      this.quantity = quantity;
   }
}

public class ArrayDequeExample {
   public static void main(String[] args) {
      Deque<Book> set = new ArrayDeque<Book>();

      // 创建书籍
      Book b1 = new Book(101, "Let us C", "Yashwant Kanetkar", "BPB", 8);
      Book b2 = new Book(102, "Data Communications & Networking", "Forouzan", "Mc Graw Hill", 4);
      Book b3 = new Book(103, "Operating System", "Galvin", "Wiley", 6);

      // 将书籍添加到Deque
      set.add(b1);
      set.add(b2);
      set.add(b3);

      // 遍历ArrayDeque
      for (Book b : set) {
         System.out.println(b.id + " " + b.name + " " + b.author + " " + b.publisher + " " + b.quantity);
      }
   }
}

输出:

101 Let us C Yashwant Kanetkar BPB 8
102 Data Communications & Networking Forouzan Mc Graw Hill 4
103 Operating System Galvin Wiley 6

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想