为什么Java TreeSet 中不允许使用 NULL?
TreeSet 是Java中 SortedSet 接口最重要的实现之一,它使用 Tree 进行存储。无论是否提供显式比较器,元素的顺序都由使用其自然顺序的集合维护。如果要正确实现 Set 接口,这必须与 equals 保持一致。
例子:
Java
// Java Program to illustrate the TreeSet
import java.util.*;
class GFG {
public static void main(String args[])
{
// Creating TreeSet and adding elements to it
TreeSet tree_set = new TreeSet();
tree_set.add("Manish");
tree_set.add("Kartik");
tree_set.add("Anand");
tree_set.add("Sahil");
// Traversing elements of TreeSet
Iterator it = tree_set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
Java
// Adding NULL value to Java TreeSet
import java.util.TreeSet;
public class Example2 {
public static void main(String[] args)
{
// Creating TreeSet and adding elements to it
TreeSet tree_Set = new TreeSet();
tree_Set.add("ABC");
tree_Set.add(null);
// Printing TreeSet elements
System.out.println(tree_Set);
}
}
输出
Anand
Kartik
Manish
Sahil
向 TreeSet 添加空值
在这个例子中,我们将在 TreeSet 中添加一个 NULL 值,这会给我们一个异常
Java
// Adding NULL value to Java TreeSet
import java.util.TreeSet;
public class Example2 {
public static void main(String[] args)
{
// Creating TreeSet and adding elements to it
TreeSet tree_Set = new TreeSet();
tree_Set.add("ABC");
tree_Set.add(null);
// Printing TreeSet elements
System.out.println(tree_Set);
}
}
输出
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.TreeMap.put(TreeMap.java:561)
at java.base/java.util.TreeSet.add(TreeSet.java:255)
at Example2.main(Example2.java:10)
说明:默认情况下,TreeSet 内部使用Comparable 接口对元素进行排序。现在在 Comparable 接口中, compareTo() 方法用于将一个值与另一个值进行比较以对元素进行排序。
因此,由于这个目的, null 没有值,这就是 compareTo() 方法无法将 null 与另一个值进行比较的原因,从而给出NullPointerException 。
添加方法声明
public boolean add(E e) throws ClassCastException, NullPointerExeption;
如果我们尝试在 TreeSet 中添加空值,它会在运行时生成NullPointerException 。