Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在HashSet中添加null不会引发异常,而在TreeSet中添加null会引发异常_Java_Hashset_Treeset - Fatal编程技术网

Java 为什么在HashSet中添加null不会引发异常,而在TreeSet中添加null会引发异常

Java 为什么在HashSet中添加null不会引发异常,而在TreeSet中添加null会引发异常,java,hashset,treeset,Java,Hashset,Treeset,为什么在HashSet中添加null不会引发异常,而是在TreeSet中添加null会引发异常 Set<String> s = new TreeSet<String>(); s.add(null); 允许添加Null值。简单地说,就是这样实现的。根据Java规范 此类允许空元素 根据它抛出的方法中的javadoc: NullPointerException-如果指定的元素为null,并且此集合使用自然排序,或者其比较器不允许null元素 因为树集的底层

为什么在
HashSet
中添加
null
不会引发
异常
,而是在
TreeSet
中添加
null
会引发异常

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

允许添加
Null
值。

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

此类允许空元素

根据它抛出的方法中的javadoc:

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


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

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