Java集合框架——HashSet源码分析

xiaoxiao2021-02-28  42

HashSet 是基于 HashMap 来实现的,HashMap 存放键值对,而 HashMap 只存放对象。 HashSet 的源码很简单,其实只需要弄懂 HashSet 的源码即可,可以参考:HashMap源码分析

属性

其属性很简单,一个 HashMap 对象,一个静态的空对象。

// HashSet基于HashMap来实现的 private transient HashMap<E,Object> map; // 一个静态的Object对象,没有什么意义,只是作为HashMap中键值对的值能put进去 private static final Object PRESENT = new Object();

构造函数

几个构造函数可以参考 HashMap 的构造函数。

public HashSet() { map = new HashMap<>(); } public HashSet(Collection<? extends E> c) { map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); } // 这个是LinkedHashSet的构造函数,当然是LinkedHashMap来实现 HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }

基本方法

方法基本都是 HashMap 的相关方法。 这里只说明一个 add 方法,其调用 HashMap 的 put 方法,将键值对插入 HashMap 中,只不过键值对中的值是一个无意义的空对象。

public boolean add(E e) { return map.put(e, PRESENT)==null; }
转载请注明原文地址: https://www.6miu.com/read-2621295.html

最新回复(0)