我已经解决了与相同问题相关的问题,但我没有清楚地了解如何使用重复条目实现地图。我在采访中被问到这个问题。请给我一些指导。
例如,一家公司有两名同名和相同开发领域的员工即。
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
答案 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提供的解决方案也非常合适。 希望它有所帮助:)