《java基础》第3集 浅析HashSet

上两节分别讲了下Hashtable/HashMap的基本知识,这次轮到HashSet

Hashtable和HashMap都提供key-value存储查询功能,HashSet略微不同,HashSet只提供key的不重复存储/查询功能。

简单的看下源码:

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

    /**
     * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }
}

HashSet内部属性 private transient HashMap<E,Object> map;

这其实就是HashSet的数据存储集合。

看下简单的add/contains方法

   
    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

HashSet巧妙的运用了一个常量 PRESENT对象作为value,

private static final Object PRESENT = new Object();

综上所述,HashSet依赖HashMap实现了key的不重复添加。

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读