从key中删除hashmap中的值

时间:2013-08-25 13:52:14

标签: java hashmap

所以,我有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");

显然这不存在,但这就是我想要的。

提前致谢。

5 个答案:

答案 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");