美文网首页
HashSet 可以 add null 吗?

HashSet 可以 add null 吗?

作者: leeehao | 来源:发表于2020-08-13 14:40 被阅读0次

    HashSet 可以 add null 吗?

    可以!

            Set<String> 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 吗?

          本文链接:https://www.haomeiwen.com/subject/ngwbdktx.html