Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем