TreeSet的null值与元素类型的约束

一、TreeSet

Java的TreeSet通过TreeMap来实现,具有自然排序的功能。

在默认情况下,元素不允许为null值,元素必须是相同类型,元素必须实现了Comparable接口;否则会出现java.lang.ClassCastException。

可以通过设置Comparator接口的实例,来实现元素允许为null值,元素为不同类型。

二、代码实现

(1)默认情况

TreeSet treeSet=new TreeSet();

treeSet.add(1);

treeSet.add(2.0);

输出结果

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

at java.lang.Double.compareTo(Unknown Source)

at java.util.TreeMap.put(Unknown Source)

at java.util.TreeSet.add(Unknown Source)

at cn.test.Test.main(Test.java:9)

(2)null值

TreeSet treeSet=new TreeSet((o1,o2)->{

return Objects.toString(o1).compareTo(Objects.toString(o2));

});

treeSet.add(1);

treeSet.add(null);

(3)不同类型

TreeSet treeSet=new TreeSet((o1,o2)->{

return Double.valueOf(o1.toString()).compareTo(Double.valueOf(o2.toString()));

});

treeSet.add(1);

treeSet.add(2.0);