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

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

Было ли это достаточно запутанным?

Ответ 1

Поскольку вы используете Map<String, List<Object>>, вы действительно ищете multimap. Я настоятельно рекомендую использовать стороннюю библиотеку, такую ​​как Google Guava, для этого - см. 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>> должен быть переписан как мультимап. В эти дни довольно легко получить то, что вам нужно без Guava, благодаря 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", "สวัสดี"]

Ответ 2

Вы можете поместить значения null. Допускается HashMap

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

Ответ 3

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

Ответ 4

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

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

map.get("somekey");

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