HashMap中键是唯一的,键一定采用了哈希算法.
比如:
HashMap<String,String> hm = new HashMap<String,String>();
hm.put("01","zhangsan");
hm.put("02","lisi");
hm.put("01","wangwu");
如果键不唯一,上面添加的元素全部添加到集合中,(实际上添加不了,这里只是假设)
那么当你调用get方法时,即:
String value = hm.get("01");
得到的value值是"zhangsan"还是"wangwu",由此证明键是唯一的.
而:
hm.put("01","zhangsan");
hm.put("02","zhangsan");
hm.put("03","zhangsan");
当你调用get方法,即:
String v1 = hm.get("01");
String v2 = hm.get("01");
String v3 = hm.get("01");
虽然得到的都是zhangsan,但是却是没有报错的.
所以在Map集合中键是唯一的,值可以重复.
注意:
如果键是自定义对象,当用HashMap存储时要在自定义类中重写hashCode和equals方法.
当用TreeMap存储时要让自定义实现Comparable接口,或者在构造方法传一个比较器. |