2012-06-28 3 views
0

У меня есть несколько вопросов о Java Collection объектов ...Что касается сбора рамок

  1. При добавлении объектов в коллекцию, как HashSet или HashMap, как объекты во внутренней памяти?
  2. Почему нет Hashtable Разрешить null значения?
+0

Дубликат вашего второго вопроса: http://stackoverflow.com/questions/7556357/why-does-hashtable-not-take-null-key – assylias

ответ

6

Вы не добавляя объект в коллекцию. Вы добавляете ссылку .

Что касается причины, почему HashTable не позволяет использовать ключи и значения - это просто дизайнерское решение; в некоторых случаях полезно отключать нулевые ключи, в то время как в других это раздражает. HashMap допускает, например, нулевые ключи и значения. Существуют различные причины, запрещающих нулям:

  • Обычно нулевой ключ или нулевое значение указывает на ошибку программирования в коде вызова. Отказ от этого в точке вставки значительно облегчает поиск ошибки, чем до тех пор, пока код не выберет значение и , тогда имеет неожиданный нуль.

  • Если вы знаете , что значения в карте не может быть пустым, то вам не нужно делать отдельную проверку для сдерживания, а затем принести: вы можете получить, и если результат нулевой, вам знаете, что ключ отсутствовал.

  • Требуется немного больше работы для обработки нулевых ключей в реализации карты. Хотя нулевые значения могут быть иногда быть полезным, нулевые ключи почти никогда.

+2

Просто чтобы быть ясно, популярная причина для запрещая нулевых ключей или значения, потому что они часто представляют логическую ошибку в программе, которая их использует. Например, Гува провела исследование на базе кода Google, в котором говорилось, что 95% коллекций никогда не имеют нулей (и отклонение нулей помогает отлаживать этих пользователей), а 5% коллекций нуждаются в нулях (и обычно для этого случая обходной путь обычно применяется). –

+0

@LouisWasserman: Да - отредактирует, чтобы уточнить это. –

+0

Можно ли сказать, что нулевой ключ является единственным, поскольку только одна ссылка может быть сопоставлена ​​с нулевым значением в любой момент времени? – corsiKa

Смежные вопросы