命名Java队列为什么是“轮询”和“提供”?
好的,我已经使用Java很长时间了,最近一直在准备我的OCJP考试。我想知道是否有人能够提供一些关于为什么选择“poll”(相对于传统的“pop”)和“offer”(相对于传统的“push”)的方法名称的见解?我特别关注java。util。队列接口,但对更一般的解释也感兴趣:)
这实际上是一个学术问题,而不是任何特定的编码方案,因为我只是想弄清楚为什么Sun(在Oracle收购它们之前就是这么做的)会选择它们的名字
哦,在有人决定把我钉十字架或者把链接扔回lmgtfy之前。。。我已经看过谷歌、雅虎、维基、必应等等,如果我忽略了一些明显的搜索标准,或者错过了一些解释它的老帖子,那么我提前道歉
# 1 楼答案
你把队列和堆栈搞混了;推送和弹出与后者相关联
在适当的生产者/消费者上下文中考虑队列;投票和报价将更有意义
# 2 楼答案
队列接口定义了一些作用于列表第一个元素的方法,这些方法的行为方式有所不同。 这些方法是:
偷窥() 此方法检索队列第一个元素的值,而不将其从队列中删除。对于方法的每次调用,我们总是得到相同的值,并且它的执行不会影响队列的大小如果队列为空,则peek()方法返回null
元素() 此方法的行为类似于peek(),因此它再次检索第一个元素的值,而不删除它。但是,如果列表为空,则element()会抛出一个NoTouchElementException
投票() 此方法通过从队列中删除队列的第一个元素来检索该元素的值。每次调用时,它都会删除列表的第一个元素,如果列表已为空,则返回null,但不会引发任何异常
删除() 此方法的行为类似于poll()方法,因此它会删除列表的第一个元素,如果列表为空,则会抛出NoTouchElementException
# 3 楼答案
因为这些方法在JavaDoc中解释了不同的语义
add
/remove
是无条件的,而offer
/poll
返回特殊值:offer
仅提供一个新值,但它可能不被接受,例如,如果队列已满poll
仅轮询值,但我们接受值可能不存在的事实更复杂的是,^{} 引入了另一对阻塞
add
/remove
的方法。当然,他们可以使用相同的名称和一组参数/标志但你不认为这是一个更好的设计吗
*https://meta.stackexchange.com/questions/73566
# 4 楼答案
我认为这仅仅是因为名字{}和{}听起来在{}和{}的行为与{}和{}和{}的行为之间模棱两可,特别是让人想起{},它的行为类似{},而不是类似{}。显然,选择名称
add
和remove
是为了匹配Java集合框架中其他类似方法的名称,这些方法要么执行请求的操作,要么引发异常;名称offer
和poll
表明它们不会引发异常