Cra*_*lus 8 java collections sortedset treeset
我认为这null是允许的Set.
那么为什么以下代码:
SortedSet<Integer> set = new TreeSet<Integer>();
set.add(null);
set.add(1); //--->Line indicated by exception
Run Code Online (Sandbox Code Playgroud)
给出以下例外?
java 中java.util.TreeMap.put(未知来源)的
java.lang.Integer.compareTo(未知来源)中的
java.lang.Integer.compareTo(未知来源)中的线程"main"java.lang.NullPointerException中的异常. util.TreeSet.add(未知来源)
Luk*_*der 18
是的你可以.但是,Comparator当null与套装中的任何其他内容进行比较时,您必须提供自己的处理案例.应用自然排序后,Java对象不知道如何比较自己null.反过来,null不知道如何将自己与任何对象进行比较,因为你无法调用null.compareTo(object).
Comparator可以在apache commons-collections库中找到这种"null-safe"的示例实现.看看NullComparator.您可以这样使用它:
// Unfortunately no support for Java generics yet, in commons-collections
@SuppressWarnings("unchecked")
SortedSet<Integer> set = new TreeSet<Integer>(new NullComparator());
set.add(null);
set.add(1);
Run Code Online (Sandbox Code Playgroud)
TreeSet的API(http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html#add ( E))说add会抛出一个NPE:
如果指定的元素为null并且此set使用自然排序,或者其比较器不允许null元素
因此,如果你想存储null,你必须提供一个可以处理这个的比较器,知道null与0或所有其他值相比的位置.