добавление ключа в HashMap без значения?

есть ли способ добавить ключ в HashMap без добавления значения? Я знаю, это кажется странным, но у меня HashMap<String, ArrayList<Object>> amd я хочу сначала создать ключи по мере необходимости, а затем проверить, существует ли определенный ключ, и если да, то поставить соответствующее значение, а именно ArrayList<Object>

что смущает?

4 ответов


так как вы используете Map<String, List<Object>>, ты действительно ищем multimap. Я настоятельно рекомендую использовать стороннюю библиотеку, такую как Google Guava для этого - см. гуава это Multimaps.

Multimap<String, Object> myMultimap = ArrayListMultimap.create();

// fill it
myMultimap.put("hello", "hola");
myMultimap.put("hello", "buongiorno");
myMultimap.put("hello", "สวัสดี");

// retrieve
List<String> greetings = myMultimap.get("hello");
                      // ["hola", "buongiorno", "สวัสดี"]

обновление Java 8: я больше не убежден, что каждый Map<K, SomeCollection<V>> следует переписать как multimap. В наши дни довольно легко получить то, что вам нужно без гуавы, благодаря Map#computeIfAbsent().

Map<String, List<Object>> myMap = new HashMap<>();

// fill it
myMap.computeIfAbsent("hello", ignored -> new ArrayList<>())
  .addAll(Arrays.asList("hola", "buongiorno", "สวัสดี");

// retrieve
List<String> greetings = myMap.get("hello");
                      // ["hola", "buongiorno", "สวัสดี"]

Я не уверен, что вы хотите сделать это. Вы можете хранить null Как значение для ключа, но если вы это сделаете, как сможете сказать, когда вы сделаете .get("key") существует ли ключ или если он существует, но с null значение? Во всяком случае, смотрите docs.


вы можете поставить null значения. Это разрешено HashMap

вы также можете использовать Set сначала проверьте его на наличие ключа,а затем заполните карту.


Да, это было достаточно запутанно;) я не понимаю почему вы хотите хранить ключи без значений, а не просто помещать пустые arraylists вместо null.

добавлять null может быть проблемой, потому что если вы вызываете

map.get("somekey");

и получает null, тогда вы не знаете, если ключ не найден или если он там есть, но карты null...