добавить ключ в HashMap без значения? - PullRequest
13 голосов
/ 18 мая 2011

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

Это достаточно запутанно?

Ответы [ 5 ]

26 голосов
/ 18 мая 2011

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

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

3 голосов
/ 18 мая 2011

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

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

2 голосов
/ 18 мая 2011

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

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

map.get("somekey");

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

0 голосов
/ 06 ноября 2018
//This program should answer your questions
import java.util.*;
public class attemptAddingtoHashMap { //Start of program

//MAIN METHOD #################################################

public static void main(String args[]) {  //main begins

Map<String, ArrayList<Object>> hmTrial = new HashMap<String, ArrayList<Object>>(); 

ArrayList alTrial = new ArrayList();//No values now

if (hmTrial.containsKey("first")) {
hmTrial.put("first", alTrial); }

else {hmTrial.put("first",alTrial);}
//in either case, alTrial, an ArrayList was mapped to the string "first"
//if you choose to, you can also add objects to alTrial later
System.out.println("hmTrial is " + hmTrial); //empty now
alTrial.add("h");
alTrial.add("e");
alTrial.add("l");
alTrial.add("l");
alTrial.add("o");
System.out.println("hmTrial is " + hmTrial);//populated now

   } //end of main
//#############################################################################################################

} //end of class

//Note - removing objects from alTrial will remove the from the hashmap
//You can copy, paste and run this code on https://ide.geeksforgeeks.org/
...