以http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)为例,使用PriorityQueue
谁能给我举一个add
和offer
方法不同的Queue
的例子?
根据Collection
文档,add
方法通常会确保元素存在于Collection
中,而不是添加重复的元素。所以我的问题是,add
和offer
方法之间的区别是什么?
offer
方法是否无论如何都会添加重复项?(我怀疑这是因为如果Collection
应该只有不同的元素,这将绕过这一点)。
编辑:在PriorityQueue
中,add
和offer
方法是相同的方法(参见下面的答案)。谁能给我举一个add
和offer
方法不同的类的例子?
发布于 2014-06-11 04:43:20
Queue
接口指定,如果当前没有可用的空间,add()
将抛出IllegalStateException
(否则返回true
),而如果由于容量限制而无法插入元素,则offer()
将返回false
。
它们在PriorityQueue
中相同的原因是该队列被指定为无界的,即没有容量限制。在没有容量限制的情况下,add()
和offer()
的合约表现出相同的行为。
发布于 2014-05-17 14:08:49
来自jdk 7的源代码,如下所示:
public boolean add(E e) {
if (offer(e))
return true;
else
throw new IllegalStateException("Queue full");
}
我们可以很容易地知道,当成功地将新元素添加到队列中时,add函数将返回true,但在失败时会抛出异常。
发布于 2017-08-02 11:10:41
我将为offer方法和add方法编写java契约示例代码,以显示它们之间的区别。
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
https://stackoverflow.com/questions/2703984
复制相似问题