Вопрос с собеседования · Java

Почему ArrayDeque не допускает null-элементов?

MiddleКоллекции
Коротко

null зарезервирован как сигнал «элемента нет»: poll и peek возвращают null для пустой очереди. Если бы null хранился, ответ стал бы неоднозначным.

  • Методы Queue: add/remove/element бросают исключения, offer/poll/peek возвращают специальные значения
  • То же правило в большинстве реализаций Queue и в ConcurrentHashMap
  • LinkedList null допускает — историческая непоследовательность

А ещё Нужен «пустой» элемент — Optional или объект-заглушка

Подробно

Интерфейс Queue предлагает две группы методов: бросающие исключение (add, remove, element) и возвращающие специальное значение (offer, poll, peek). Вторая группа использует null как признак пустоты, поэтому хранение null сделало бы возврат двусмысленным. По той же причине null запрещён в реализациях BlockingQueue и в ConcurrentHashMap — там невозможно отличить «значение отсутствует» от «значение равно null» при конкурентном доступе. А вот ArrayList, HashMap и HashSet null спокойно допускают, так что обобщать запрет на всю библиотеку нельзя: правило зависит от контракта конкретного интерфейса.

Что хотят услышать

  • Причина запрета.
  • Две группы методов Queue.

Частые ошибки

  • Считать, что запрет на null действует во всех коллекциях.
  • Забывать про ту же причину запрета в ConcurrentHashMap.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓null — признак пустоты: его возвращают poll и peek
  • ✗Из-за устройства кольцевого буфера null физически нельзя записать в его массив
  • ✗Это ограничение снято в современных версиях Java
  • ✗null запрещён во всех коллекциях java.util

Что спросят дальше

  • Чем add отличается от offer, а remove от poll?
  • Почему ConcurrentHashMap запрещает null-значения?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования