为什么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)
广告