黑马程序员技术交流社区

标题: 关于HashSet [打印本页]

作者: 403383221    时间: 2013-4-29 19:04
标题: 关于HashSet
本帖最后由 403383221 于 2013-4-30 07:59 编辑

java源码中
public HashSet() {
        map = new HashMap<>();
    }
也就是说当我们new一个HashSet时,其实是创建了一个HashMap,那我们存入Hashset中的对象是在HashMap的什么位置?
作者: 何锦权    时间: 2013-4-29 19:19

java源码中HashSet类中定义了的add方法如下:
public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
这不就表明了存入Hashset中的对象,其实就是存放在HashMap中的键位置上
作者: 吴波    时间: 2013-4-29 19:26
HashMap和HashSet很像,其实HashSet底层就是使用的HashMap集合

由于键是唯一的,所以只能存放在key的位置上
作者: 403383221    时间: 2013-4-29 19:29
吴波 发表于 2013-4-29 19:26
HashMap和HashSet很像,其实HashSet底层就是使用的HashMap集合

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

那值的位置是null吗
作者: 403383221    时间: 2013-4-29 19:29
何锦权 发表于 2013-4-29 19:19
java源码中HashSet类中定义了的add方法如下:
public boolean add(E e) {
        return map.put(e, PRE ...

那值的位置是null吗
作者: 吴波    时间: 2013-4-29 19:36
403383221 发表于 2013-4-29 19:29
那值的位置是null吗

................
知道Map<k,y>吧
这值就放在  k   这位置上
作者: 何锦权    时间: 2013-4-29 20:18
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




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