Java的PriorityQueue的add和offer方法有什么区别?


Answers:


17

不同之处在于,如果未能将元素插入受大小限制的Queue中offer()则将返回,而将抛出。falseadd()IllegalStateException

您应该offer()在以下情况下使用:插入元素失败是正常现象,而add()失败是例外情况(需要处理)。


4

为了找出差异,需要遵循PriorityQueue API javadocs,后者依次具有“指定者”部分,这些部分将读者引向Queue接口中的相应方法:

  • Queue.add

    如果可以立即将指定的元素插入此队列,而不会违反容量限制,则在成功时返回true,如果当前没有可用空间,则抛出IllegalStateException ...
    返回:(trueCollection.add(E)指定)
    抛出:IllegalStateException-如果由于容量限制此时无法添加元素...

  • 队列报价

    如果可以在不违反容量限制的情况下立即将指定的元素插入此队列。当使用容量受限的队列时,此方法通常比add(E)更可取,因为add(E)可能仅通过引发异常而无法插入元素 ...
    返回:true如果元素已添加到此队列,否则false...

两种方法都存在,因为它们必须由声明的接口实现。

请注意,由于PriorityQueue是无界的(如javadocs中所述:“ 基于优先级堆的无界优先级队列...”),因此上述API设计器的首选项不适用。这意味着程序员可以自行决定在特定的使用上下文中选择更适合其需求的方法。


2
Pffft您去看了看文档。弱。; P
yannis 2013年

1
@YannisRizos接下来您会看到的是我抱怨像Col Shrapnel一样 :) 哦,您无法与30秒的答案竞争:在您找不到合适的链接之前,问题将得到5个答案
answers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.