所以,我有HashMap<String, String>
public HashMap<String, String> frozen = new HashMap<String, String>();
我想根据密钥从中删除一个值。所以我可以说我放入了这些
frozen.put("1", "1_1");
frozen.put("1", "1_2");
我想只删除其中一个值,而不是整个键集。
我该怎么做呢?如果你仍然不明白,这个不存在的方法应该解释它。
frozen.remove("1", "1_2");
显然这不存在,但这就是我想要的。
提前致谢。
答案 0 :(得分:9)
似乎最简单的解决方案是使用某种类型的List
作为您的价值。在这种特殊情况下,它可能看起来像这样:
final Map<String, List<String>> map = new HashMap<String, List<String>>();
final String key = "1";
map.put(key, new LinkedList<String>());
map.get(key).add("1_1");
map.get(key).add("1_2");
然后要删除给定特定键的值(如您的问题中所示),您可以尝试类似map.get(key).remove("1_2");
答案 1 :(得分:0)
你在做什么是不可能的。您不能使用相同的密钥输入不同的值。您可以使用remove method删除条目,但是对于您想要的内容,您可以查看Guava's MultiMap之类的内容。
如果你真的想根据一个值删除,你需要使用entrySet()迭代Map的值,然后根据值调用remove方法使用找到的键。
答案 2 :(得分:0)
找到解决此类问题的最简单方法是查阅JavaDocs:http://docs.oracle.com/javase/7/docs/api/
在那里找到你的类(在你的情况下:java.util.HashMap)并查找remove方法。在这种情况下,您不需要将值传递给方法(这将是非常低效的)。要从HashMap中删除某些内容,只需将该键移至remove方法:
frozen.remove("1");
这将从HashMap中删除键值对"1", "1_2"
。
为什么这不会删除第一个键值对?因为put
方法会覆盖以前的任何值。为了能够将键映射到多个值,请尝试使用String和List创建HashMap:
HashMap<String, ArrayList> frozen = new HashMap<String, ArrayList>();
是一个可能的例子。
答案 3 :(得分:0)
您可能已将put
的参数顺序反转。不允许重复的密钥。新值(对于相同的键)替换旧的值。所以,
frozen.put("1", "1_1");
frozen.put("1", "1_2");
生成只有一个条目的地图:key =“1”,value =“1_2”。相反,
frozen.put("1_1", "1" );
frozen.put("1_2", "1" );
生成一个包含2个条目的地图。要删除条目,您只需要引用其键,因为它们是唯一的:
frozen.remove("1_2");
如果这不响铃,那么请更具体地说明数据结构应该保留什么,什么不是。一些用例会有所帮助。
答案 4 :(得分:0)
我相信你正试图将多个字符串映射到一个键。如果您将密钥映射到List
。
public Map<String, List<String>> frozen = new HashMap<String, List<String>>();
然后,您可以将多个值添加到与
相同的键中public void addToMappedList(Map<String, List<String>> map,
String key, String value) {
List<String> existingValues = map.get(key);
if (existingValues == null) {
existingValues = new ArrayList<String>();
map.put(key, existingValues);
}
existingValues.add(value);
}
addToMappedList(frozen, "1", "1_1");
addToMappedList(frozen, "1", "1_2");
以下是从List
中删除单个值的方法。返回的布尔表示value
是否实际被发现并从List
中删除。
public boolean removeFromMappedList(Map<String, List<String>> map,
String key, String value) {
List<String> existingValues = map.get(key);
if (existingValues != null) {
return existingValues.remove(value);
}
return false;
}
removeFromMappedList(frozen, "1", "1_1"); // true
removeFromMappedList(frozen, "1", "1_3"); // false
要删除整个密钥以及与之关联的List
,只需直接使用Map
frozen.remove("1");