java - 为什么HashSet加null不抛出异常,而TreeSet加null会抛出异常

标签 java hashset treeset

为什么要添加 nullHashSet不扔Exception ,但添加 nullTreeSet抛出异常。

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

抛出 NullPointerException
Set<String>  s = new HashSet<String>();

允许 Null要增加的值(value)。

最佳答案

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

关于java - 为什么HashSet加null不抛出异常,而TreeSet加null会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785418/

相关文章:

java - 如何解决这个Treeset程序?

java - 排序集和比较器

java - Spring在所有 Controller 方法中执行一个方法而不注入(inject)服务

java - hibernate 保存到数据库 "Duplicate entry ' 1' for key ' UK_2n5xttsxwbyc6x67l0x8phfwn'"

java - TreeSet 和compareTo() 方法。单排序或多排序

Java:更新哈希集的哈希集

Java List 获取最后一个重复对象

java - 用整数填充(树)集的最短方法?

Java 图形 - 游戏的各个阶段

java - 如何用assertj进行更深层次的键值匹配