Java教程-Java Deque接口

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