Почему NULL разрешено в списке, а не в интерфейсе очереди?

#java #list #null #queue #add

#java #Список #null #очередь #Добавить

Вопрос:

Для начала, List упорядоченная коллекция, которая позволяет вставлять нулевые элементы. С другой стороны Queue , это коллекция LIFO или FIFO, которая обычно не допускает нулевых элементов. LinkedList реализует оба List и Queue и, таким образом, является единственной Queue реализацией, которая допускает null в качестве элемента.

Предположим, что причина, по которой недопустимо использование null, заключается в Queue том, что такие методы, как poll() или peek(), могут возвращать null как:

  • больше элементов нет
  • null как элемент

* Это обычный ответ в stackoverflow на вопрос «Почему null не разрешено в очереди».

Зная, что проблема null может вызвать нас Queue , любой программист может создать эту логику:

 if (!queue.isEmpty()){
    queue.poll();
}
  

Используя логику, которую я только что предоставил, мы можем легко сказать, что если мы получим null в качестве возвращаемого значения, оно на 100% будет значением элемента, а не null в качестве пустой очереди. Итак, я должен спросить еще раз, какова истинная причина запрета null Queue ? Я что-то еще упускаю?

Комментарии:

1. Вы всегда можете использовать необязательные элементы, если вам действительно нужны нулевые элементы.

2. Мне больше любопытна причина такого решения, чем моя собственная реализация. Одно правило, которому я следую: понимать, почему что-то работает, а не только как это работает 😉

3. Я не нашел этих причин. Может быть, прокомментируйте, чтобы мы могли чему-то научиться из этого?

4. Причина в том, что вы сами указали: poll предназначен для возврата null , когда в очереди не осталось элемента. Точка. Вот как это было разработано, и это то, что мы получаем. Тот факт, что у вас может быть обходной путь для этого, не имеет значения.