Java队列 - 为什么"民意调查"和"提供"?

zpa*_*win 33 java naming

好的,所以我已经使用Java很长一段时间了,最​​近我一直在准备我的OCJP考试.我想知道是否有人能够提供任何有关为什么方法名称"民意调查"(而不是更传统的"流行")和"提议"(而不是更传统的"推动")被选中的原因?我正在专门研究java.util.Queue接口,但也会对更一般的解释感兴趣:)

这实际上是一个学术问题,而不是任何特定的编码方案,因为我只是想弄清楚为什么Sun(因为这是在Oracle收购之前完成的)会选择他们所做的名字.

哦,在任何人决定将我钉在十字架上或扔掉链接到lmgtfy之前...我已经看过google,yahoo,wiki,bing等所以如果我忽略了一些明显的搜索条件或错过了一些旧帖子,解释它然后我提前道歉.

Tom*_*icz 37

因为这些方法在JavaDoc中有不同的语义.add/ remove是无条件的offer/ poll 返回特殊值:

  • offer提供新值,但可能不被接受,例如,如果队列已满

  • poll轮询价值,但我们接受价值可能不存在的事实.

更复杂的是,BlockingQueue引入了另一对阻塞add/ 的方法remove.当然他们可以使用相同的命名与一堆参数/标志,

smellyGet(boolean blocking, boolean failOnEmpty)
Run Code Online (Sandbox Code Playgroud)

但你不认为这是一个更好的设计吗?

        | Throws ex. | Special v. | Blocks | Times out
--------+------------+------------+--------+---------------------
Insert  | add(e)     | offer(e)   | put(e) | offer(e, time, unit)
Remove  | remove()   | poll()     | take() | poll(time, unit)
Examine | element()  | peek()     | N/A    | N/A
Run Code Online (Sandbox Code Playgroud)

*https://meta.stackexchange.com/questions/73566


duf*_*ymo 9

你把Queue和Stack混淆了; push和pop与后者相关联.

在适当的生产者/消费者环境中考虑Queue; 民意调查和报价将更有意义.

  • 我不完全同意.没错,`push`和`pop`与堆栈有很强的联系,但它们通常也用于队列; 例如,C++的`std :: queue`有`push`和`pop`. (8认同)

din*_*pal 8

Queue 接口定义了一些作用于列表第一个元素的方法,它们的行为方式不同。这些方法是:

peek()
element()
poll()
remove()
Run Code Online (Sandbox Code Playgroud)

peek() 这个方法检索队列第一个元素的值,而不将它从队列中移除。对于方法的每次调用,我们总是得到相同的值,并且它的执行不会影响队列的大小。如果队列为空, peek() 方法返回 null

element() 此方法的行为类似于 peek(),因此它再次检索第一个元素的值而不删除它。但是,如果列表为空, element()会抛出 NoSuchElementException

poll() 这个方法通过从队列中移除来检索队列第一个元素的值。. 在每次调用时,它删除列表的第一个元素,如果列表已经为空,则返回 null 但不抛出任何异常

remove() 此方法的行为与 poll() 方法相同,因此它删除列表的第一个元素,如果列表为空,则抛出 NoSuchElementException