美文网首页
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 吗?

    HashSet 可以 add null 吗? 可以! 输出 为什么 HashSet 可以 add null 值 因...

  • HashSet & HashMap源码

    HashSet HashSet()构造器 底层new了一个HashMap,再来看Set的add()方法 add()...

  • 浅谈HashSet

    HashSet结构图 HashSet主要方法 public boolean add(E e) public boo...

  • JUC-Set

      HashSet构造函数:默认容量为16的HashMap。(底层是HashMap)   HashSet的add方...

  • Java小细节:List可以add(null)吗?

    在写代码的时候,有时候遇到for循环,写到下面的时候有一点犹豫。 遍历的时候,是否需要对每个元素判空?换句话说,L...

  • 2.04_Set集合,比较器

    HashSet:非重复性,允许有null,不是线程安全的 LinkedHashSet:,继承了hashset保持插...

  • 28 HashSet和TreeSet

    问题 HashSet和TreeSet有什么不同 答案 HashSet允许使用 null 值,不保证映射的顺序恒久不...

  • HashSet重复元素判断

    HashSet重复元素判断: HashSet不能添加重复的元素,当调用add(Object)方法时候, 首先会调用...

  • Java教程 第35章 HashSet

    HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。 HashSet 允许有 null ...

  • JDK源码分析(4)HashSet

    JDK版本 HashSet简介 HashSet特点 非线程安全 允许null值 添加值得时候会先获取对象的hash...

网友评论

      本文标题:HashSet 可以 add null 吗?

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