📜  Java中的AbstractQueue与示例(1)

📅  最后修改于: 2023-12-03 15:01:58.495000             🧑  作者: Mango

Java中的AbstractQueue与示例

在Java语言中,AbstractQueue是一个抽象类,它实现了Queue接口,并且提供了一些共通的 Queue 方法的实现。AbstractQueue已经实现了add, remove, 和 element方法,Queue也继承了AbstractQueue的功能,所以任何实现了Queue接口的类都可以立刻使用它们。在这篇文章中,我们将会探讨AbstractQueue的详细功能和一些示例。

AbstractQueue的主要方法:

我们可以从以下方法来了解AbstractQueue的主要功能:

  • add(E e)
  • offer(E e)
  • remove()
  • poll()
  • element()
  • peek()

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应用程序中。