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

V.S*_*V.S 2 java hashset treeset

为什么加nullHashSet没有抛出Exception,但添加nullTreeSet抛出异常。

Set<String>  s = new TreeSet<String>();
        s.add(null);
Run Code Online (Sandbox Code Playgroud)

抛出 NullPointerException

Set<String>  s = new HashSet<String>();
Run Code Online (Sandbox Code Playgroud)

允许Null添加值。

小智 6

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