码迷,mamicode.com
首页 > 其他好文 > 详细

第六章 HashSet源码解析

时间:2016-01-07 20:07:49      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

6.1、对于HashSet需要掌握以下几点

  • HashSet的创建:HashSet()
  • 往HashSet中添加单个对象:即add(E)方法
  • 删除HashSet中的对象:即remove(Object key)方法
  • 判断对象是否存在于HashSet中:containsKey(Object key)

 注:HashSet没有获取单个对象的方法,需要使用iterator

 

6.2、构建HashSet

 源代码:

技术分享
    //HashSet底层数据结构:通过hashmap的key不可重复的原则,使得存放入HashSet中的值不重复
    private transient HashMap<E, Object> map;
    //默认的hashmap的value
    private static final Object PRESENT = new Object();
    /**
     * 可存放16个元素
     */
    public HashSet() {
        map = new HashMap<E, Object>();
    }
    /**
     * 指定hashset的容量和负载因子
     */
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<E, Object>(initialCapacity, loadFactor);
    }
    /**
     * 指定hashset的容量
     */
    public HashSet(int initialCapacity) {
        map = new HashMap<E, Object>(initialCapacity);
    }
View Code

注:HashSet的底层是HashMap,其依靠HashMap的key不可重复,来保证将来加入到HashSet中的元素也不重复(会将元素作为key放到hashmap中,参照6.3)。

 

6.3、add(E e)

源代码:

add(E e)

技术分享
    /**
     * 往set中添加值
     */
    public boolean add(E e) {
        //查看hashmap的put方法,若覆盖已有key的旧值,会返回旧值;若没有相应的key则返回null
        return map.put(e, PRESENT) == null;
    }
View Code

注意:这里调用了HashMap的put(K key, V value)

 

6.4、remove(Object key)

源代码:

技术分享
    /**
     * 删除指定元素
     */
    public boolean remove(Object o) {
        return map.remove(o) == PRESENT;
    }
View Code

注:这里调用了HashMap的remove(Object key)

 

6.5、contains(Object key)

源代码:

技术分享
    /**
     * set中是否包含指定元素
     */
    public boolean contains(Object o) {
        return map.containsKey(o);
    }
View Code

注意:这里调用了HashMap的containsKey(Object key)

 

总结:

  • HashSet底层就是HashMap
  • 其依靠HashMap的key不可重复,来保证将来加入到HashSet中的元素也不重复(会将元素作为key放到hashmap中)
  • HashSet线程不安全

HashMap源码解析:

http://www.cnblogs.com/java-zhao/p/5106189.html

 

第六章 HashSet源码解析

标签:

原文地址:http://www.cnblogs.com/java-zhao/p/5110953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!