HashTable - это очень старый класс, начиная с JDK 1.0. Классы, которые находятся в JDK 1.0 , называются Legacy классы и по умолчанию они синхронизированы .
Чтобы понять это, прежде всего вам нужно понять комментарии автора к этому классу.
«Этот класс реализует хеш-таблицу, которая отображает ключи на значения. Любой ненулевой объект может использоваться как ключ или как значение. Чтобы успешно хранить и извлекать объекты из хеш-таблицы, объекты, используемые в качестве ключей, должны реализовывать метод hashCode и метод equals. ”
Класс HashTable реализован на механизме хеширования, т.е. для хранения любой пары ключ-значение, необходимого ей хеш-кода объекта ключа. HashTable вычисляет хэш для каждого ключа, вызывая hashCode для каждого ключа. Это приведет к ошибке, если ключ будет нулевым, он не сможет дать хэш для пустого ключа, он выдаст NullPointerException , и аналогично случаю для значения, выбрасывая ноль, если значение равно нулю .
Но позже выяснилось, что нулевой ключ и значение имеют свою собственную важность, затем были представлены пересмотренные реализации HashTable, такие как HashMap, которые допускают один нулевой ключ и несколько нулевых значений.
Для HashMap он допускает один нулевой ключ, и для ключей есть нулевая проверка, если ключ нулевой, тогда этот элемент будет храниться в нулевом месте в массиве Entry.
Мы не можем иметь более одного нулевого ключа в HashMap, потому что Ключи уникальны , поэтому допускается только один нулевой ключ и допускается много значений Null.
USE - Нулевой ключ, который мы можем использовать для некоторого значения по умолчанию.
Модифицированная и улучшенная реализация HashTable была позже представлена как ConcurrentHashMap .