【问题标题】:Why adding null in HashSet does not throw Exception,but adding null in TreeSet throw Exception为什么在HashSet中添加null不会抛出异常,但在TreeSet中添加null会抛出异常
【发布时间】:2016-04-22 05:19:02
【问题描述】:

为什么在HashSet中添加null不会抛出Exception,而是在TreeSet中添加null会抛出异常。

Set<String>  s = new TreeSet<String>();
        s.add(null);

抛出NullPointerException

Set<String>  s = new HashSet<String>();

允许添加Null 值。

【问题讨论】:

    标签: java hashset treeset


    【解决方案1】:

    因为 TreeSet 的底层数据结构是 Red-Black tree,它是一个二叉搜索树,因此是排序的。要对其进行排序,必须有一个比较器来确定一个值是否等于、低于或大于另一个值。默认的 Comparator 不是 null 安全的,但是如果您编写自己的 Comparator 来支持 null,那么使用 null 作为键是没有问题的。

    【讨论】:

      【解决方案2】:

      简单地说,就是这样实现的。根据HashSet的Java规范,

      这个类允许空元素

      根据 TreeSet 的 javadoc 在它抛出的 add 方法中:

      NullPointerException - 如果指定元素为 null 并且此集合使用自然排序,或者其比较器不允许 null 元素

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 2010-12-09
        • 2022-01-15
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多