java.util.Queue接口add()和remove(),add()和remove(),element()或者peek()区别

本文详细介绍了Java5中新增的Queue接口,包括其如何扩展Collection接口,以及offer、add、poll、remove、peek和element等方法的区别与用法。通过一个简单的例子展示了如何使用Queue接口,并对比了add()和remove()方法与offer()和poll()方法的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优
点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

小例子:

/**
*
* @author Zang XT
*/
import java.util.Queue;
import java.util.LinkedList;
public class TestQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.offer("Hello");
queue.offer("World!");
queue.offer("你好!");
System.out.println(queue.size());
String str;
while((str=queue.poll())!=null){
System.out.print(str);
}
System.out.println();
System.out.println(queue.size());
}
}

offer,add区别:
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove区别:
remove() 和 poll() 方法都是从队列中删除第一个元素(head)。remove() 的行为与 Collection 接口的版本相似,
但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

### Java中的Queue接口概述 Java中的`Queue`接口表示一种通常遵循先进先出(FIFO, First In First Out)原则的数据结构,尽管如此,某些特殊类型的队列可能采用不同的插入移除策略[^2]。此接口属于Java集合框架的一部分,并扩展自`Collection`接口。 #### Queue接口的主要特性 - **容量管理**:不同实现类对于容量有着各自的规定,有的允许无限增长而另一些则有固定大小限制。 - **线程安全性**:部分实现提供了内置同步机制以确保多线程环境下的安全访问;例如`ConcurrentLinkedQueue`就是一个无界的线程安全队列[^3]。 - **异常处理**:当执行诸如向已满的队列添加元素的操作失败,具体行为取决于所使用的实现方式——有些可能会抛出异常,其他的或许只是简单返回false表明操作未完成。 #### 常见方法说明 | 方法名 | 描述 | | --- | --- | | `boolean add(E e)` | 尝试将指定元素加入到该队列中,如果由于空间不足等原因无法成功,则抛出`IllegalStateException`异常。| | `E remove()` | 获取并移除此队列头部的元素,如果没有可用元素则抛出NoSuchElementException异常。| | `void clear()` | 移除队列内所有的元素。| 这些仅仅是`Queue`接口所提供众多功能的一小部分例子,在实际应用过程中还需要考虑特定场景下最适合的选择[^1]。 #### 示例代码展示 下面给出一段简单的程序片段用来演示如何创建以及操作一个基本的`LinkedList`形式的队列: ```java import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args){ // 创建一个新的 LinkedList 类型的 Queue 实例 Queue<String> queue = new LinkedList<>(); // 向队列中添加几个字符串对象 System.out.println("Adding elements..."); queue.add("First"); queue.offer("Second"); // offer() add() 效果相似但是更推荐使用offer() queue.offer("Third"); // 输出当前队列状态 System.out.println(queue); // 取得并移除第一个进入队列的对象 String firstElement = queue.poll(); System.out.println("Removed element: " + firstElement); System.out.println("Current state of the queue after removal:"); System.out.println(queue); // 查看下一个要被取出但不真正移除它 String peekedElement = queue.peek(); System.out.println("Peek at next element without removing it: "+peekedElement); } } ``` 这段代码展示了怎样初始化一个基于链表结构(`LinkedList`)的具体化队列实例,并对其进行了若干基础性的增删查改操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值