Добавив ключ к 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
...