Подтвердить что ты не робот

Java Queues - почему "опрос" и "предложение"?

Хорошо, поэтому я уже давно использую Java и недавно готовился к экзамену OCJP. Мне было интересно, сможет ли кто-нибудь дать представление о почему имя метода "опрос" (в отличие от более традиционных "поп" ) и "предложение" (в отличие от более традиционных) были выбраны? Я смотрю конкретно на интерфейс java.util.Queue, но вас тоже интересуют более общие объяснения:)

Это скорее академический вопрос, чем какой-либо конкретный сценарий кодирования, поскольку я просто пытаюсь понять, почему Sun (как это было сделано до того, как Oracle их купил) будет выбирать имена, которые они сделали.

О, и до того, как кто-то решит распять меня или отбросить ссылки на lmgtfy... Я уже посмотрел на google, yahoo, wiki, bing и SO, поэтому, если я пропущу некоторые очевидные критерии поиска или пропустил какой-то старый пост, который объясняет это, я заранее извиняюсь.

4b9b3361

Ответ 1

Потому что эти методы имеют разную семантику, объясненную в 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

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

Ответ 2

Вы путаете очередь с Stack; push и pop связаны с последним.

Подумайте о очереди в надлежащем контексте производителя/потребителя; опрос и предложение будут иметь больше смысла.

Ответ 3

Интерфейс Queue определяет некоторые методы для действий над первым элементом списка, которые отличаются тем, как они ведут себя. Эти методы:

peek()
element()
poll()
remove()

Заглянуть() Этот метод извлекает значение первого элемента очереди, не удаляя его из очереди. Для каждого вызова метода мы всегда получаем одно и то же значение, и его выполнение не влияет на размер очереди. Если очередь пуста, метод peek() возвращает null.

Элемент() Этот метод ведет себя как peek(), поэтому он снова извлекает значение первого элемента без его удаления. однако, если список пуст, элемент() выдает исключение NoSuchElementException.

Опрос() Этот метод извлекает значение первого элемента очереди, удаляя его из очереди., При каждом вызове он удаляет первый элемент списка, и если список уже пуст, он возвращает значение null, но не генерирует никакого исключения.

Удалить() Этот метод ведет себя как метод poll(), поэтому он удаляет первый элемент списка и , если список пуст, он генерирует исключение NoSuchElementException

Ответ 4

Я предполагаю это просто потому, что имена push и pop звучат неоднозначно между поведением add и remove, а именами offer и poll — и pop, в частности, напоминает java.util.Stack.pop(), который ведет себя как remove, а не как poll. Названия add и remove были явно выбраны так, чтобы они соответствовали именам аналогичных методов в другом месте в Java Collections Framework, которые либо выполняют запрошенную операцию, либо создают исключение; имена offer и poll указывают на то, что они не создают исключений.