将null添加到空TreeSet引发NullPointerException

时间:2014-06-30 11:32:02

标签: java nullpointerexception treeset

import java.util.TreeSet;
class Test 
{
    public static void main(String[] args) 
    {
        TreeSet t=new TreeSet();
        t.add(null);
        System.out.println(t);
    }
}

输出:NullPointerException。 我在很多文章中读到空TreeSet第一次接受null但是我得到了NullPointerException ...我正在使用java7..can任何正文都澄清了我的怀疑....

7 个答案:

答案 0 :(得分:19)

Java 7中的documentation for TreeSet#add声明:

  

NullPointerException - 如果指定的元素为null并且此set使用自然排序,或者其比较器不允许null元素

因此,由于您尚未指定可以处理空值的自定义比较器实现,因此您将获得NPE。

编辑:可以在Java 6中添加null元素作为TreeSet / TreeMap的第一个元素,但它被视为bug:< / p>

答案 1 :(得分:4)

这是因为对于第一个元素的空TreeSet,可以插入空值,但是在插入第一个值后,如果我们尝试插入任何其他对象,那么我们将获得NullPointerException

对于非空TreeSet,如果我们尝试在运行时插入空值,您将获得NullPointerException。这是因为当树中存在某些元素时,在插入任何对象之前,它会使用compareTo()方法将新对象与现有对象进行比较,并决定将新对象放在何处。因此,通过插入null,compareTo()方法会在内部抛出NullPointerException

我认为在新版本的Java中不允许空插入。

答案 2 :(得分:2)

API说明:

概要:在TreeMap中插入无效元素会引发NPE 描述:由于java.util.TreeMap中的错误,以前可以将无效的null元素和未实现Comparable接口的元素插入到空的TreeMap或TreeSet中。只能将一个无效元素插入到空的TreeMap或TreeSet中;其他元素会导致预期的NullPointerException或ClassCastException。收集时的大多数其他操作也会失败。从Java SE 7开始,将无效的null元素或未实现Comparable的元素插入空TreeMap或TreeSet会引发NullPointerException。

答案 3 :(得分:1)

从1.7开始,TreeSet完全不接受null。如果你强制添加,那么我们将得到NullPointerException。直到1.6 null才被接受为第一个元素。

答案 4 :(得分:0)

TreeSet在内部使用Comparable接口对元素进行升序排序。 Comparable接口的compareTo()方法彼此比较两个值以找到更大的值。如果您将null添加为元素,则不能将null与其他值进行比较来确定哪个是更大/更大的值,因此,compareTo()方法将引发NullPointerException。

在TreeSet中声明add方法为

// => result { "name": "john", "dinner": "sushi" }

答案 5 :(得分:0)

对于空TreeSet作为第一个元素,可以插入。 但是,如果要尝试插入任何元素,则在插入该null之后,将得到NullPointerException。 对于Empty TreeSet,如果我们尝试插入null,将得到NullPointerException

答案 6 :(得分:0)

在Java 1.7版及更高版本中,对于For Tree设置,不允许将第一个元素作为null设置,它将给运行时异常-NullPointerException。 同样,如果您可以在Java 1.6中进行尝试,则当在第一个元素上添加null时,它将被编译并运行,但是在添加任何元素之后,它将给出null点异常。