HashSet源码分析

老子叫甜甜 提交于 2019-12-04 21:24:44

1. HashSet是使用HashMap来实现的

public HashSet() {
    map = new HashMap<>();
}

private transient HashMap<E,Object> map;  

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();   //虚拟值,用来表示hashMap中的value值,在set中的值都是以key的形式存储在hashMap中
public boolean add(E e) {       //add()方法将元素作为key,并以PRESENT为value存入HashMap中
        return map.put(e, PRESENT)==null;
    }

2. 总结

  (1)由于在hashMap中key不可以重复所以HashSet中的元素不可重复。

  (2)同理hashMap中允许key为null,因此HashSet中的key也可以是null。

  (3)LinkedHashSet是使用LinkedHashMap实现的,原理相似。

  (4)TreeSet是使用NavigbleMap来实现的,原理同上。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!