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任何正文都澄清了我的怀疑....
答案 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点异常。