📅  最后修改于: 2023-12-03 15:01:58.495000             🧑  作者: Mango
在Java语言中,AbstractQueue是一个抽象类,它实现了Queue接口,并且提供了一些共通的 Queue 方法的实现。AbstractQueue已经实现了add, remove, 和 element方法,Queue也继承了AbstractQueue的功能,所以任何实现了Queue接口的类都可以立刻使用它们。在这篇文章中,我们将会探讨AbstractQueue的详细功能和一些示例。
AbstractQueue的主要方法:
我们可以从以下方法来了解AbstractQueue的主要功能:
add(E e)
方法
public boolean add(E e);
此方法根据Queue的规定,将特定元素插入队列中,如果有必要,则增加队列容量。
如果添加成功,则返回true,否则抛出IllegalStateException。
Queue<String> queue = new LinkedList<>();
try {
queue.add("one");
queue.add("two");
queue.add("three");
System.out.println("Added elements: " + queue);
} catch (Exception e) {
e.printStackTrace();
}
offer(E e)
方法
public boolean offer(E e);
此方法将特定元素插入队列中,如果队列已满,则返回false。
Queue<String> queue = new ArrayDeque<>(2);
boolean added = queue.offer("One");
System.out.println("Added 1? " + added);
added = queue.offer("Two");
System.out.println("Added 2? " + added);
added = queue.offer("Three");
System.out.println("Added 3? " + added);
remove()
方法
public E remove();
此方法从队列中删除队列的头部元素。如果队列为空,则抛出NoSuchElementException。
Queue<String> queue = new ArrayDeque<>();
queue.add("one");
queue.add("two");
queue.add("three");
System.out.println(queue.remove());
poll()
方法
public E poll();
此方法从队列中删除并返回队列的头部元素。如果队列为空,则返回null。
Queue<String> queue = new ArrayDeque<>();
queue.add("one");
queue.add("two");
queue.add("three");
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.println(queue.poll());
element()
方法
public E element();
此方法返回队列头部的元素而不移除它。如果队列为空,则抛出NoSuchElementException。
Queue<String> queue = new ArrayDeque<>();
queue.add("one");
queue.add("two");
queue.add("three");
System.out.println(queue.element());
peek()
方法
public E peek();
此方法返回队列头部的元素而不移除它。如果队列为空,则返回null。
Queue<String> queue = new ArrayDeque<>();
queue.add("one");
queue.add("two");
queue.add("three");
System.out.println(queue.peek());
System.out.println(queue.peek());
System.out.println(queue.peek());
System.out.println(queue.peek());
以上的这些方法在 AbstractQueue中已经被实现了,因此,我们可以直接使用它们,并且不需要再次实现。
示例:
public class MyQueue<E> extends AbstractQueue<E> {
private final List<E> list;
public MyQueue() {
list = new ArrayList<>();
}
public MyQueue(int size) {
list = new ArrayList<>(size);
}
@Override
public Iterator<E> iterator() {
return list.iterator();
}
@Override
public int size() {
return list.size();
}
@Override
public boolean offer(E e) {
return list.add(e);
}
@Override
public E poll() {
if (list.isEmpty()) {
return null;
}
return list.remove(0);
}
@Override
public E peek() {
if (list.isEmpty()) {
return null;
}
return list.get(0);
}
}
使用示例:
Queue<String> queue = new MyQueue<>();
queue.offer("One");
queue.offer("Two");
queue.offer("Three");
System.out.println(queue.poll());
System.out.println(queue.peek());
System.out.println(queue.poll());
System.out.println(queue.poll());
输出如下:
One
Two
Two
Three
结论:
AbstractQueue是Java中的一个抽象类,它实现了Queue接口,并提供了一些共通的Queue方法的实现。我们可以在我们自己的类中,通过继承AbstractQueue来快速实现Queue接口,并且使用它在自己的Java应用程序中。