黑马程序员技术交流社区

标题: hashMap的内部是怎么存储数据的啊 [打印本页]

作者: 张业婷    时间: 2014-10-6 17:54
标题: hashMap的内部是怎么存储数据的啊
老师讲过hashSet 其实底层用的就是hashMap,但是我有疑问存储数据时只有键才用的哈希算法,还是键和值都采用了哈希算法
作者: 鲁行    时间: 2014-10-6 22:30
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接口,或者在构造方法传一个比较器.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2