为什么TreeSet在Java中不允许空值?


TreeSet提供了一种Set接口实现,该接口使用树进行存储。对象按已排序和升序存储。

访问和检索时间非常快,当需要快速查找存储大量已排序信息时,TreeSet是一个极佳的选择。

原因是,如果你查看TreeSet的内部实现,它使用自然排序,这意味着TreeSet默认使用Comparable接口,通过比较其他值来对其值进行排序。

示例

public class TreeSetDemo {
   public static void main(String args[]) {
      TreeSet<String> treeSet = new TreeSet<String>();
      treeSet.add("Apple");
      treeSet.add("Mango");
      treeSet.add("Orage");
      treeSet.add("grapes");
      treeSet.add("Banana");
      System.out.println(treeSet);
   }
}

输出

[Apple, Banana, Mango, Orage, grapes]

向TreeSet添加null值

TreeSet会根据其自然顺序向其添加元素。这在内部使用compareTo(或compare)方法相互比较元素。

如果你尝试使用其中一种方法将任何对象与null值进行比较,将会抛出NullPointerException。

因此,如果你尝试向TreeSet添加null值,它会在运行时生成一个NullPointerException。

示例

import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
   public static void main(String args[]) {
      Set<Integer> treeSet = new TreeSet<Integer>();
      //Populating the HashSet
      treeSet.add(1124);
      treeSet.add(3654);
      treeSet.add(7854);
      treeSet.add(9945);
      System.out.println(treeSet);
      //Adding null elements
      treeSet.add(null);
      treeSet.add(null);
      treeSet.add(null);
      System.out.println(treeSet);
   }
}

运行时异常

Run time exception:
[1124, 3654, 7854, 9945]
Exception in thread "main" java.lang.NullPointerException
   at java.util.TreeMap.put(Unknown Source)
   at java.util.TreeSet.add(Unknown Source)
   at MyPackage.TreeSetExample.main(TreeSetExample.java:16)

更新时间: 2020 年 7 月 3 日

2K+ 浏览量

开启你的 职业生涯

完成课程获得认证

开始
广告