A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张业婷 中级黑马   /  2014-10-6 17:54  /  1491 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师讲过hashSet 其实底层用的就是hashMap,但是我有疑问存储数据时只有键才用的哈希算法,还是键和值都采用了哈希算法

1 个回复

倒序浏览
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接口,或者在构造方法传一个比较器.

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马