映射具有重复值

时间:2014-02-07 05:39:03

标签: java collections hashmap

我已经解决了与相同问题相关的问题,但我没有清楚地了解如何使用重复条目实现地图。我在采访中被问到这个问题。请给我一些指导。

例如,一家公司有两名同名和相同开发领域的员工即。 map.put("Tom Hank","Java");

map.put("Tom Hank","Java");

众所周知,我们无法在HashMap中存储重复值。那么我可以实现这个并根据键检索值吗?还是其他更好的解决方案?

这些是我经历过但却无法理解如何执行此操作的问题。

How to include duplicate keys in HashMap? | How can i have a HashMap in Java with duplicate keys

3 个答案:

答案 0 :(得分:3)

地图不支持重复键。您可以将集合用作相同键的值。

因为如果地图以前包含该键的映射,则旧值将替换为指定的值。

Map<Integer, List<String>>

你可以使用这样的东西。

答案 1 :(得分:2)

在Google中输入multimaps,您就会找到所需内容。

另一种方法是按照以下方式进行模拟多图:

Map<String, List<String>> multimap=new Map<String, List<String>>();
if (multimap.contains("Tom Hanks"){
   multimap.get("Tom Hanks").add("value2");
}
else {
   List<String> values=new ArrayList<String>();
   values.add("value1");
   multimap.put("Tom Hanks", values);
}

但是找到一个多图表实现将为您省去所有麻烦。

答案 2 :(得分:2)

我希望这会对你有所帮助:

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.MultiHashMap;
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.HashedMap;

public class TryingMultiMap {
    public Map<String, String> testMap(MultiMap m) {
        Map<String, String> m_copy = new HashMap();
        m_copy.putAll(m);
        System.out.println(m_copy);
        return m_copy;
    }

    public static void main(String[] args) {
        System.out.println("test");
        MultiMap m = new MultiHashMap();
        m.put("Bhaskar","Java");
        m.put("Bhaskar","Java");
        m.put("Ravi",".Net");
        m.put("Ravi", ".Net");
        m.put("Suyash","C++");
        System.out.println(m);

        /*Map exhibitMap= new HashMap();
        h.put("Bhaskar", "Java");
        h.put("Bhaskar", "Java");
        System.out.println("exhibitMap"+ExhibitMap)*/;

        TryingMultiMap obj = new TryingMultiMap();
        obj.testMap(m);
    }

}

它如何将你的问题带入图片,是通过一个可以包含重复的多图。最后,将multimap放在地图中,您也可以在新Map中找到添加了重复项的MultiMap。另外,在main方法中找到注释的代码,它表明Map不能保留重复的事实。

但是,我发现Armas提供的解决方案也非常合适。 希望它有所帮助:)