我应该使用哪种地图?

时间:2013-08-25 22:06:01

标签: java collections map

我想在map<String,String>中添加一些值。但我不想用相同的键移位数据。 示例:

map.put("foo","some");
map.put("bar","thing");
map.put("foo","new");

必须返回foo-some,bar-thing,foo-new.

但没有bar-thing,foo-new

我应该使用哪种地图?

2 个答案:

答案 0 :(得分:4)

您需要第三方库,因为它不在标准运行时中。 Google Guava库得到了积极维护,功能非常强大。

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html

答案 1 :(得分:2)

我相信你正在尝试将多个整数映射到单个字符串键。如果您将密钥映射到List,则可以。 HashMapTreeMap之间的选择取决于您是否希望按键分类。

我认为排序不是你想要的;所以,HashMap就足够了。

public Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();

然后,您可以将多个值添加到与

相同的键中
public void addToMappedList(Map<String, List<Integer>> map,
                                 String key, Integer value) {
    List<Integer> existingValues = map.get(key);
    if (existingValues == null) {
        existingValues = new ArrayList<Integer>();
        map.put(key, existingValues);
    }
    existingValues.add(value);
}

addToMappedList(map, "foo", 1);
addToMappedList(map, "foo", 2);

以下是从List中删除单个值的方法。返回的布尔表示value是否实际被发现并从List中删除。

public boolean removeFromMappedList(Map<String, List<Integer>> map,
                                         String key, Integer value) {
    List<Integer> existingValues = map.get(key);
    if (existingValues != null) {
        return existingValues.remove(value);
    }
    return false;
}

removeFromMappedList(map, "foo", 1); // true
removeFromMappedList(map, "foo", 3); // false

要删除整个密钥以及与之关联的List,只需直接使用Map

map.remove("foo");