HashSet源码解剖

首先要知道hashset是什么?
1. 不允许重复对象
2. 无序容器,你无法保证每个元素的存储顺序
3. 只允许一个 null 元素

用法和list其实是一样的,但是实现原理确实不一样的。
我们直接看源码,其实不要看到这些源码就害怕,hashset的源码只有353行,抛去不重要的其实没几行代码啦!

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

???没了,就这么简单!看样子像是放到了一个map中。我们看看map和PRESENT这个东西

    private transient HashMap map;
    private static final Object PRESENT = new Object();

是不是一下子就明白了,hashset只是将传进来的元素作为key,然后虚拟个 value存放到了hashmap中。我们知道hashmap中如果key相同,那么会被认为是
一个相同的对象,然后就实现了不会又重复对象的特性,而且hashmap是无需的所
以hashset也就是无序的了,同理因为hashmap只有一个null值,那么hashset也只有一个null值了。
然后就是在没有什么好看的了,源码如此简单!

你可能感兴趣的:(HashSet源码解剖)