在没有值的情况下向HashMap添加密钥?

有没有办法在不添加值的情况下向HashMap添加密钥? 我知道它看起来很奇怪,但我有一个HashMap<String, ArrayList> amd我想首先能够根据需要创建密钥,然后检查某个密钥是否存在,如果是,则输入适当的值,即ArrayList

那令人困惑吗?

由于您正在使用Map> ,因此您真的在寻找一个多图 。 我强烈建议您使用Google Guava等第三方库 – 请参阅Guava的Multimaps

 Multimap myMultimap = ArrayListMultimap.create(); // fill it myMultimap.put("hello", "hola"); myMultimap.put("hello", "buongiorno"); myMultimap.put("hello", "สวัสดี"); // retrieve List greetings = myMultimap.get("hello"); // ["hola", "buongiorno", "สวัสดี"] 

Java 8更新:我不再相信每个Map>都应该重写为多图。 现在,由于Map#computeIfAbsent() ,很容易在没有Guava的情况下获得所需的东西。

 Map> myMap = new HashMap<>(); // fill it myMap.computeIfAbsent("hello", ignored -> new ArrayList<>()) .addAll(Arrays.asList("hola", "buongiorno", "สวัสดี"); // retrieve List greetings = myMap.get("hello"); // ["hola", "buongiorno", "สวัสดี"] 

我不确定你想要这样做。 您可以将null存储为键的值,但是如果您这样做,您将如何判断,当您执行.get("key") ,该键是否存在,或者它是否存在但具有null值? 无论如何,请参阅文档 。

您可以输入null值。 HashMap允许它

您最初也可以使用Set ,并检查它是否为键,然后填充地图。

是的,它足够令人困惑;)我不明白为什么你想要存储没有值的键而不是只是把空的arraylists而不是null

添加null可能是个问题,因为如果你打电话

 map.get("somekey"); 

并且收到一个null ,然后你不知道,如果找不到密钥或者它是否存在但是映射为null