Java中的Deque接口及其示例
在Java中,Deque是一个双端队列接口,它表示元素按照顺序排序的线性集合。Deque界面扩展了Queue界面,它提供了将元素插入队列的两端的操作。该接口还支持队列的所有其他操作,例如检索,删除和大小估算。该接口定义了两端特定的方法,以及一些Queue方法的变体。
Deque的方法
Deque接口定义了以下方法:
方法 | 描述 |
---|---|
void addFirst(E e) |
将元素插入此deque的开头 |
void addLast(E e) |
将元素插入此deque的末尾 |
boolean offerFirst(E e) |
在此deque的开头插入指定元素。 |
boolean offerLast(E e) |
在此deque的末尾插入指定元素。 |
E removeFirst() |
检索并删除此deque的第一个元素 |
E removeLast() |
检索并删除此deque的最后一个元素 |
E pollFirst() |
检索并删除此deque的第一个元素;如果deque为空,则返回null |
E pollLast() |
检索并删除此deque的最后一个元素;如果deque为空,则返回null |
E getFirst() |
检索但不删除此deque的第一个元素。 |
E getLast() |
检索但不删除此deque的最后一个元素。 |
E peekFirst() |
检索但不删除此deque的第一个元素;如果deque为空,则返回null |
E peekLast() |
检索但不删除此deque的最后一个元素;如果deque为空,则返回null |
boolean removeFirstOccurrence(Object o) |
从deque中删除第一次出现的指定元素(从头部到尾部遍历deque时)。 |
boolean removeLastOccurrence(Object o) |
从deque中删除最后一次出现的指定元素(从头部到尾部遍历deque时)。 |
boolean add(E e) |
将指定元素添加到此deque的末尾。 |
boolean offer(E e) |
将指定元素添加到此deque的末尾。 |
E remove() |
检索并删除此deque的头部。 |
E poll() |
检索并删除此deque的头部;如果deque为空,则返回null。 |
E element() |
检索但不删除此deque的头部。 |
E peek() |
检索但不删除此deque的头部;如果deque为空,则返回null。 |
void push(E e) |
将元素推入此deque的堆栈层次结构中,也就是在deque的头部插入一个元素。 |
E pop() |
从此deque表示的堆栈处弹出一个元素,也就是把deque的头部元素移除掉。 |
boolean contains(Object o) |
如果此deque包含指定元素,则返回true。 |
int size() |
返回deque中的元素数。 |
Iterator<E> iterator() |
返回一个按元素插入顺序遍历此deque中元素的迭代器。 |
Iterator<E> descendingIterator() |
返回一个按元素逆序遍历此deque中元素的迭代器。 |
void addLast(E e) - 与add(E e)方法等效 |
|
E getFirst() - 与element()方法等效 |
|
void addFirst(E e) - 与push(E e)方法等效 |
示例代码
Deque是可以用作栈或队列的,具体是哪个取决于使用哪些方法。下面是一些示例代码,演示了如何使用Deque接口。
1. 使用Deque作为队列
import java.util.Deque;
import java.util.LinkedList;
public class DequeQueueExample {
public static void main(String[] args) {
Deque<String> queue = new LinkedList<>();
// 添加元素到队列
queue.add("Java");
queue.add("C++");
queue.add("Python");
// 获取队列的第一个元素,不删除
System.out.println("First element of queue: " + queue.peek());
// 获取并删除队首元素
String firstElement = queue.poll();
System.out.println("Removed first element of queue: " + firstElement);
// 队列中添加一个新元素
queue.offer("JavaScript");
// 遍历队列中的元素
System.out.println("All elements of queue:");
for (String element : queue) {
System.out.println(element);
}
}
}
此代码将Deque用作队列,使用add方法添加元素,并使用peek获取第一个元素。然后,使用poll方法删除并获取队列中的第一个元素,并使用offer方法将新元素添加到队列末尾。最后,使用for-each循环遍历队列中的所有元素。
2. 使用Deque作为栈
import java.util.Deque;
import java.util.LinkedList;
public class DequeStackExample {
public static void main(String[] args) {
Deque<String> stack = new LinkedList<>();
// 将元素推入栈中
stack.push("Java");
stack.push("C++");
stack.push("Python");
// 获取栈顶元素,不删除
System.out.println("Top element of stack: " + stack.peek());
// 获取并删除栈顶元素
String topElement = stack.pop();
System.out.println("Removed top element of stack: " + topElement);
// 将新元素推入栈中
stack.push("JavaScript");
// 遍历栈中的所有元素
System.out.println("All elements of stack:");
for (String element : stack) {
System.out.println(element);
}
}
}
此代码演示了如何将Deque用作栈。它使用push方法将元素推入栈中,并使用peek获取栈顶元素。然后,使用pop方法获取并删除栈顶元素,并使用push方法将新元素推入栈顶。最后,使用for-each循环遍历栈中的所有元素。
结论
以上就是使用Deque接口的简单示例代码,我们可以看到,在Java中Deque接口是非常有用的,它可以作为队列或栈来使用。我们可以使用它的方法在队列的两侧添加元素、删除元素、获取元素等操作。掌握了Deque接口的使用方法,你的Java编程能力将更进一步。