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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 403383221 中级黑马   /  2013-4-29 19:04  /  1534 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 403383221 于 2013-4-30 07:59 编辑

java源码中
public HashSet() {
        map = new HashMap<>();
    }
也就是说当我们new一个HashSet时,其实是创建了一个HashMap,那我们存入Hashset中的对象是在HashMap的什么位置?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览

java源码中HashSet类中定义了的add方法如下:
public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
这不就表明了存入Hashset中的对象,其实就是存放在HashMap中的键位置上

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
HashMap和HashSet很像,其实HashSet底层就是使用的HashMap集合

由于键是唯一的,所以只能存放在key的位置上

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
吴波 发表于 2013-4-29 19:26
HashMap和HashSet很像,其实HashSet底层就是使用的HashMap集合

由于键是唯一的,所以只能存放在key的位置 ...

那值的位置是null吗
回复 使用道具 举报
何锦权 发表于 2013-4-29 19:19
java源码中HashSet类中定义了的add方法如下:
public boolean add(E e) {
        return map.put(e, PRE ...

那值的位置是null吗
回复 使用道具 举报
403383221 发表于 2013-4-29 19:29
那值的位置是null吗

................
知道Map<k,y>吧
这值就放在  k   这位置上
回复 使用道具 举报
403383221 发表于 2013-4-29 19:29
那值的位置是null吗

这个是源码中 PRESENT 的定义, private static final Object PRESENT = new Object();
所以map中存的是值就是该Object对象的地址值,
return map.put(e, PRESENT)==null;表示如果此 set 中尚未包含指定元素,则添加指定元素,否则返回false(因为map.put(e, PRESENT)返回的是PRESENT,PRESENT!=null,所以返回false

点评

你的头像太有意思了,让我加分也更有乐趣了。谢谢你  发表于 2013-4-29 23:42
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马