У меня есть несколько вопросов о Java Collection
объектов ...Что касается сбора рамок
- При добавлении объектов в коллекцию, как
HashSet
илиHashMap
, как объекты во внутренней памяти? - Почему нет
Hashtable
Разрешитьnull
значения?
У меня есть несколько вопросов о Java Collection
объектов ...Что касается сбора рамок
HashSet
или HashMap
, как объекты во внутренней памяти?Hashtable
Разрешить null
значения?Hashtable не допускает нулевых значений, поскольку он использует равных и методы Hashcode объектов добавил к нему
Вы не добавляя объект в коллекцию. Вы добавляете ссылку .
Что касается причины, почему HashTable
не позволяет использовать ключи и значения - это просто дизайнерское решение; в некоторых случаях полезно отключать нулевые ключи, в то время как в других это раздражает. HashMap
допускает, например, нулевые ключи и значения. Существуют различные причины, запрещающих нулям:
Обычно нулевой ключ или нулевое значение указывает на ошибку программирования в коде вызова. Отказ от этого в точке вставки значительно облегчает поиск ошибки, чем до тех пор, пока код не выберет значение и , тогда имеет неожиданный нуль.
Если вы знаете , что значения в карте не может быть пустым, то вам не нужно делать отдельную проверку для сдерживания, а затем принести: вы можете получить, и если результат нулевой, вам знаете, что ключ отсутствовал.
Требуется немного больше работы для обработки нулевых ключей в реализации карты. Хотя нулевые значения могут быть иногда быть полезным, нулевые ключи почти никогда.
Просто чтобы быть ясно, популярная причина для запрещая нулевых ключей или значения, потому что они часто представляют логическую ошибку в программе, которая их использует. Например, Гува провела исследование на базе кода Google, в котором говорилось, что 95% коллекций никогда не имеют нулей (и отклонение нулей помогает отлаживать этих пользователей), а 5% коллекций нуждаются в нулях (и обычно для этого случая обходной путь обычно применяется). –
@LouisWasserman: Да - отредактирует, чтобы уточнить это. –
Можно ли сказать, что нулевой ключ является единственным, поскольку только одна ссылка может быть сопоставлена с нулевым значением в любой момент времени? – corsiKa
Дубликат вашего второго вопроса: http://stackoverflow.com/questions/7556357/why-does-hashtable-not-take-null-key – assylias