一道关于Map的面试题:Map的key如何保证唯一
前段时间面试的时候,面试官问了一些关于集合的题目,前面几个都是各大面试宝典司空见惯的题目。但问到Map集合的时候,有几个问题回答的不好。特别是被问到Map的key如果是Object时,是如何保证key是唯一的?当时完全没有读懂这道题目的问题点是什么,回答的相当不好!就这个问题来重新梳理一下Map原来忽略的一些地方。
常用Map实现类有哪些?
HashMap、HashTable、ConcurrentHashMap、TreeMap、LinkedHashMap、weakHashMap、
IdentityHashMap。
Map的key和value是否可以为空?
我使用Map的场景,key值得话一般要不是String类型,要不就是Integer类型。用Object来做key值的话,几乎是没用过,null来做过key的话,应该就更少了。代码测试下,来验证下这个问题。
public void mapTest(){
Map map = new HashMap();
map.put(null,1);
map.put(null,2);
map.put(1,1);
//map.put(null,null); for (Object obj : map.keySet()){
System.out.println("key="+obj +" value="+map.get(obj));
}
System.out.println(map);
System.out.println(map.get(null));
}
输出结果为:
key=null value=2
key=1 value=1
{null=2, 1=1}
2
从结果可以看出,HashMap的key可以为空,如果有多个key为null,那么value会被覆盖。
map.put(null,null);
System.out.println(map);
输出结果为:
{null=null}
HashMap的key和value可以同时为空
public void mapTest(){
Map map = new HashMap();
map.put(null,null);
map.put(1,null);
map.put(2,null);
for (Object obj : map.keySet()){
System.out.println("key="+obj +" value="+map.get(obj));
}
System.out.println(map);
}
输出结果为