Java中的队列remove()方法

Java中的队列remove()方法

队列(Queue)是一种有序、限制插入和删除操作的集合。Java中Queue接口是针对队列的一个基本定义,它的实现类有LinkedList和PriorityQueue。Queue中remove()方法是将队列中的头部元素删除并返回该元素的方法。

remove()方法定义

在Queue接口中,remove()方法定义如下:

/**
 * 检索并删除队列的头部。
 * 如果队列为空,则抛出NoSuchElementException异常。
 */
E remove()

从上面的注释可以看出,如果队列为空,remove()方法会抛出NoSuchElementException异常。

示例代码

下面是使用LinkedList实现队列的示例代码:

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.add("Alice");
        queue.add("Bob");
        queue.add("Charlie");
        System.out.println("队列头部元素:" + queue.peek());  // 输出“Alice”
        queue.remove();
        System.out.println("队列头部元素:" + queue.peek());  // 输出“Bob”
        queue.remove();
        System.out.println("队列头部元素:" + queue.peek());  // 输出“Charlie”
        queue.remove();
        System.out.println("队列头部元素:" + queue.peek());  // 输出null
        // 下面的代码会抛出NoSuchElementException异常
        queue.remove();
    }
}

在上面的代码中,我们首先创建了一个LinkedList对象作为队列,然后向队列中添加了三个元素。接着,我们使用peek()方法检索队列的头部元素,再使用remove()方法将该元素从队列中删除。最后,我们再次使用peek()方法检索队列的头部元素,由于该元素已被删除,所以输出的是新的队列头部元素。最后,我们调用remove()方法删除了最后一个元素,并试图从空队列中删除元素,导致抛出NoSuchElementException异常。

remove()方法源码

下面是LinkedList中remove()方法的源码:

public E remove() {
    return removeFirst();
}

public E removeFirst() {
    Node<E> f = first;
    if (f == null)
        throw new NoSuchElementException();
    return unlinkFirst(f);
}

E unlinkFirst(Node<E> f) {
    final E element = f.item;
    final Node<E> next = f.next;
    f.item = null;
    f.next = null; // help GC
    first = next;
    if (next == null)
        last = null;
    else
        next.prev = null;
    size--;
    modCount++;
    return element;
}

从上面的源码中可以看到,remove()方法实际上是调用了removeFirst()方法,然后removeFirst()方法又调用了unlinkFirst()方法。unlinkFirst()方法中,首先检查队列是否为空,如果为空就抛出异常;然后取出队列头部元素,将first指针指向下一个元素,最后返回被删除的元素。

结论

Java中Queue接口提供了remove()方法用于删除队列的头部元素。如果队列为空,则该方法会抛出NoSuchElementException异常。在LinkedList中,remove()方法实际上是调用了removeFirst()方法,然后removeFirst()方法又调用了unlinkFirst()方法。unlinkFirst()方法中,首先检查队列是否为空,如果为空就抛出异常;然后取出队列头部元素,将first指针指向下一个元素,最后返回被删除的元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程