為什麼TreeSet在Java中不允許空值?


TreeSet提供了一種Set介面實現,該介面使用樹進行儲存。物件按已排序和升序儲存。

訪問和檢索時間非常快,當需要快速查詢儲存大量已排序資訊時,TreeSet是一個極佳的選擇。

原因是,如果你檢視TreeSet的內部實現,它使用自然排序,這意味著TreeSet預設使用Comparable介面,透過比較其他值來對其值進行排序。

示例

public class TreeSetDemo {
   public static void main(String args[]) {
      TreeSet<String> treeSet = new TreeSet<String>();
      treeSet.add("Apple");
      treeSet.add("Mango");
      treeSet.add("Orage");
      treeSet.add("grapes");
      treeSet.add("Banana");
      System.out.println(treeSet);
   }
}

輸出

[Apple, Banana, Mango, Orage, grapes]

向TreeSet新增null值

TreeSet會根據其自然順序向其新增元素。這在內部使用compareTo(或compare)方法相互比較元素。

如果你嘗試使用其中一種方法將任何物件與null值進行比較,將會丟擲NullPointerException。

因此,如果你嘗試向TreeSet新增null值,它會在執行時生成一個NullPointerException。

示例

import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
   public static void main(String args[]) {
      Set<Integer> treeSet = new TreeSet<Integer>();
      //Populating the HashSet
      treeSet.add(1124);
      treeSet.add(3654);
      treeSet.add(7854);
      treeSet.add(9945);
      System.out.println(treeSet);
      //Adding null elements
      treeSet.add(null);
      treeSet.add(null);
      treeSet.add(null);
      System.out.println(treeSet);
   }
}

執行時異常

Run time exception:
[1124, 3654, 7854, 9945]
Exception in thread "main" java.lang.NullPointerException
   at java.util.TreeMap.put(Unknown Source)
   at java.util.TreeSet.add(Unknown Source)
   at MyPackage.TreeSetExample.main(TreeSetExample.java:16)

更新時間: 2020 年 7 月 3 日

2K+ 瀏覽量

開啟你的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.