TreeSet的null值與元素型別的約束

茅坤寶駿氹發表於2018-05-02

一、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);

相關文章