Все
интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять
null, она выбрасывает
NullPointerException или
ClassCastException.
Большинство списков (
LinkedList,
ArrayList) принимают null без проблем. Большинство очередей (
Queue и
Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap не может
посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.
Иногда этот вопрос дается как задача с подвохом про
TreeMap. Nullability её ключей зависит от готовности к этому
компаратора. Натуральный порядок (который работает для
Comparable ключей) не поддерживает null. Раньше в реализации был
баг, который позволял
положить значение по ключу null в корень дерева без выброса исключения.
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.