好的,所以我已经使用Java很长一段时间了,最近我一直在准备我的OCJP考试。我想知道是否有人能够提供任何洞察 为什么 方法名称“民意调查”(而不是更传统的“流行”)和“提供”(而选择更传统的“推”是什么?我正在专门研究java.util.Queue接口,但也会对更一般的解释感兴趣:)
这实际上是一个学术问题,而不是任何特定的编码方案,因为我只是想弄清楚为什么Sun(因为这是在Oracle收购之前完成的)会选择他们所做的名字。< / p>
哦,之前有人决定将我钉在十字架上或扔掉链接到lmgtfy ......我已经看过google,yahoo,wiki,bing等所以如果我忽略了一些明显的搜索条件或错过了一些旧的在这里发帖解释,然后我提前道歉。
答案 0 :(得分:34)
因为这些方法在JavaDoc中解释了不同的语义。 add
/ remove
返回特殊值时,offer
/ poll
是无条件的:
offer
只有提供一个新值,但可能不接受,例如如果队列已满
poll
只有民意调查代表该值,但我们接受该值可能不存在的事实。
为了使问题复杂化,BlockingQueue
引入了另一对阻止add
/ remove
的方法。当然,他们可以使用相同的名称和一堆参数/标志,
smellyGet(boolean blocking, boolean failOnEmpty)
但是你不认为这是一个更好的设计吗?
| 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
答案 1 :(得分:8)
你把Queue和Stack混淆了; push和pop与后者相关联。
将Queue视为适当的生产者/消费者背景;民意调查和报价会更有意义。
答案 2 :(得分:3)
Queue接口定义了一些处理列表第一个元素的方法,这些方法的行为方式不同。 这些方法是:
peek()
element()
poll()
remove()
偷看() 此方法检索队列的第一个元素的值,而不从队列中删除它。对于方法的每次调用,我们总是得到相同的值,并且它的执行不会影响队列的大小。 如果队列为空,则peek()方法返回null 。
元素() 此方法的行为类似于peek(),因此它再次检索第一个元素的值而不删除它。但是,如果列表为空,则element()会抛出NoSuchElementException 。
民意调查() 此方法通过从队列中删除队列的第一个元素的值来检索它的值。 。在每次调用时,它都会删除列表的第一个元素,如果列表已经为空,则返回null,但不会抛出任何异常。
删除() 此方法的行为与poll()方法相同,因此它会删除列表的第一个元素,如果列表为空则会抛出NoSuchElementException
答案 3 :(得分:1)
我认为这只是因为名字push
和pop
在add
和remove
的行为与offer
和{{1}的行为之间听起来含糊不清特别是,poll
让人联想到pop
,其行为类似于java.util.Stack.pop()
,而非remove
。显然选择名称poll
和add
来匹配Java Collections Framework中其他地方的类似方法的名称,这些方法执行请求的操作或者引发异常;名称remove
和offer
暗示他们不会引发例外。