在 Java 中的队列中添加方法和提供方法之间有什么区别?

2022-08-31 07:59:40

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

任何人都可以给我一个队列的例子,其中添加提供方法不同?

根据 Collection 文档,该方法通常会寻求确保元素存在于 中,而不是添加重复项。所以我的问题是,和方法有什么区别?addCollectionaddoffer

该方法是否会添加重复项?(我怀疑这是因为如果一个应该只有不同的元素,这将规避这一点)。offerCollection

编辑:在一个和方法是相同的方法(见我下面的答案)。任何人都可以给我一个和方法不同的类的例子吗?PriorityQueueaddofferaddoffer


答案 1

我猜区别在于合约,当元素无法添加到集合中时,该方法会引发异常并且不会。addoffer

寄件人: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collection.html#add%28E%29

如果集合出于除已包含该元素以外的任何原因拒绝添加特定元素,则必须引发异常(而不是返回 false)。这将保留在此调用返回后集合始终包含指定元素的不变量。

寄件人: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Queue.html#offer%28E%29

如果可能,将指定的元素插入到此队列中。当使用可能施加插入限制的队列(例如容量边界)时,方法提供通常比方法Collection.add(E)更可取,后者可能仅通过引发异常而无法插入元素。


答案 2

实现没有区别:PriorityQueue.add

public boolean add(E e) {
    return offer(e);
}

对于 AbstractQueue 来说,实际上有一个区别:

public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

推荐