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>();