首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中,队列中的add和offer方法有什么不同?

在Java中,队列中的add和offer方法有什么不同?
EN

Stack Overflow用户
提问于 2010-04-24 17:46:19
回答 4查看 104.9K关注 0票数 136

http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)为例,使用PriorityQueue

谁能给我举一个addoffer方法不同的Queue的例子?

根据Collection文档,add方法通常会确保元素存在于Collection中,而不是添加重复的元素。所以我的问题是,addoffer方法之间的区别是什么?

offer方法是否无论如何都会添加重复项?(我怀疑这是因为如果Collection应该只有不同的元素,这将绕过这一点)。

编辑:在PriorityQueue中,addoffer方法是相同的方法(参见下面的答案)。谁能给我举一个addoffer方法不同的类的例子?

EN

回答 4

Stack Overflow用户

发布于 2014-06-11 04:43:20

Queue接口指定,如果当前没有可用的空间,add()将抛出IllegalStateException (否则返回true),而如果由于容量限制而无法插入元素,则offer()将返回false

它们在PriorityQueue中相同的原因是该队列被指定为无界的,即没有容量限制。在没有容量限制的情况下,add()offer()的合约表现出相同的行为。

票数 11
EN

Stack Overflow用户

发布于 2014-05-17 14:08:49

来自jdk 7的源代码,如下所示:

代码语言:javascript
复制
public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

我们可以很容易地知道,当成功地将新元素添加到队列中时,add函数将返回true,但在失败时会抛出异常。

票数 8
EN

Stack Overflow用户

发布于 2017-08-02 11:10:41

我将为offer方法和add方法编写java契约示例代码,以显示它们之间的区别。

代码语言:javascript
复制
BlockingQueue<String> queue = new ArrayBlockingQueue<>(2);
        queue.add("TestQuue1");     
        queue.add("TestQuue2"); 
        queue.add("TestQuue3");  // will throw "java.lang.IllegalStateException: Queue full

BlockingQueue<String> queue = new ArrayBlockingQueue<>(2);
        queue.offer("TestQuue1");       
        queue.offer("TestQuue2");   
        queue.offer("TestQuue3"); // will not throw any exception
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2703984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档