📜  为什么Java TreeSet 中不允许使用 NULL?

📅  最后修改于: 2022-05-13 01:55:07.420000             🧑  作者: Mango

为什么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