跳到主要内容

Queue 中 poll()和 remove()有什么区别?

参考答案:

poll()remove()都是Java中Queue接口中的方法,但它们在处理元素时有着显著的区别。

  1. poll()方法:

poll()方法用于从队列中删除指定的元素(如果它存在的话)。如果元素存在,则成功删除并返回true;如果元素不存在,则不进行任何操作并返回falsepoll()方法不会抛出异常,即使队列为空或者元素不存在。

示例:

Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);

boolean removed = queue.poll(2);  // 返回 true,因为成功删除了元素 2
System.out.println(queue);  // 输出 [1, 3]

removed = queue.poll(4);  // 返回 false,因为元素 4 不存在
System.out.println(queue);  // 输出 [1, 3],队列没有变化
  1. remove()方法:

remove()方法也用于从队列中删除指定的元素(如果它存在的话)。但是,当元素不存在时,remove()会抛出NoSuchElementException异常。此外,remove()还可以用于删除队列中的头元素(即最早添加的元素),这与poll()不同。

示例:

Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);

boolean removed = queue.remove();  // 删除头元素 1,返回 true
System.out.println(queue);  // 输出 [2, 3]

removed = queue.remove(4);  // 抛出 NoSuchElementException,因为元素 4 不存在

总结:

  • poll()用于删除指定的元素,如果元素不存在则不抛出异常。
  • remove()可以用于删除指定的元素或队列的头元素,如果元素不存在则抛出NoSuchElementException异常。

在使用这些方法时,请根据您的需求选择合适的方法。如果您不确定元素是否存在,并且不希望抛出异常,那么poll()可能是更好的选择。如果您确定元素应该存在,或者您想删除队列的头元素,那么remove()可能更适合。