繁体   English   中英

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

[英]Why adding null in HashSet does not throw Exception,but adding null in TreeSet throw Exception

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

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

抛出NullPointerException

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

允许添加Null值。

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

简而言之,这就是它的实现方式。 根据HashSet的Java规范,

此类允许使用null元素

而根据的Javadoc TreeSet中添加它抛出方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM