HashSet 可以 add null 吗?

HashSet 可以 add null 吗?

可以!

        Set sd = new HashSet<>();
        sd.add(null);
        sd.add(null);
        System.out.println(sd.size());

输出

1

为什么 HashSet 可以 add null 值

因为 HashSet 基于 HashMap 实现,利用 HashMap 实现了 Set 接口的 add 方法。本质是上通过 Key 来进行去重。
如下为 HashSet 的 add 方法:

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

PRESENT 是一个静态常量,主要被用来 Map 占位。

如下为 HashMap 中的方法:

    public V put(K key, V value) {
        return putVal(hash(key), key, value, false, true);
    }

注意,当某个 key 已存在 value 则会将 value 快照返回,否则返回 null,HashSet 正是利用了这个规则。
注意,HashSet 无论 add 的元素是 null 或者是某个对象,都会填充 PRESENT value 保证判断成立。

你可能感兴趣的:(HashSet 可以 add null 吗?)