Почему ArrayDeque не допускает null-элементов?
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-значения?
Разбор темы
- Очереди и стек: ArrayDeque и PriorityQueue
ArrayDeque как кольцевой буфер и замена Stack, PriorityQueue как бинарная куча и её неотсортированная итерация.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.