首先,我们将看到TreeSet与Java中的HashSet有何不同?
TreeSet在java.util包中可用。
TreeSet是Set接口的实现类。
TreeSet的基础数据结构是Balanced Tree。
在TreeSet中,不保留“元素的插入顺序”,因为元素将按照某种升序排序插入TreeSet中,或者换句话说,“元素的插入顺序”不需要与“检索”相同元素的顺序”。
在TreeSet中,对象仅作为值表示为一组单个元素,作为单个实体。
在TreeSet中,“不允许使用重复的元素”,这意味着无法在TreeSet中插入重复的元素。
在TreeSet中,对于非空集,“不可能插入空”。
在TreeSet中,将空Set设置为第一个元素“可以插入空值”,如果在插入第一个元素后插入null,则不可能或无效。
在TreeSet中,不允许使用“异构对象”,如果强行插入,则会得到异常“ ClassCastException”。
示例
//Java程序演示TreeSet的行为 import java.util.*; class TreeSetClass { public static void main(String[] args) { //创建TreeSet的实例 TreeSet ts = new TreeSet(); //通过使用add()在TreeSet中添加元素 ts.add(10); ts.add(30); ts.add(40); ts.add(20); /* ts.add(30); 这里不会有任何异常或错误,但它将被忽略,因为重复无法插入 */ /* ts.add(null); 在这里我们将得到一个异常NullPointerException 因为我们要为非空集插入null */ /* ts.add("Java"); 在这里,我们将获得一个异常ClassCastException 因为我们要在TreeSet中插入异构对象 */ //显示当前树集 System.out.println("Current TreeSet is :" + ts); } }
输出结果
E:\Programs>javac TreeSetClass.java E:\Programs>java TreeSetClass Current TreeSet is :[10, 20, 30, 40]
其次,我们将看到HashSet与Java中的TreeSet有何不同?
HashSet在java.util包中可用。
HashSet是Set接口的实现类。
HashSet是LinkedHashSet的父类。
TreeSet的基础数据结构是Hashtable。
在HashSet中,“元素的插入顺序”未保留,或者换句话说,“元素的插入顺序”不需要与“元素的检索顺序”相同。
在HashSet中,对象仅作为值表示为一组单个元素,作为单个实体。
在HashSet中,“不允许使用重复的元素”,这意味着无法在HashSet中插入重复的元素。
在HashSet中,对于非空集和空集,“可以插入null”。
在HashSet中,允许“异构对象”,如果将其强行插入,则不会出现任何异常。
示例
//Java程序演示HashSet的行为 import java.util.*; class HashSetClass { public static void main(String[] args) { //创建HashSet的实例 HashSet hs = new HashSet(); //通过使用add()方法在HashSet中添加元素 hs.add(10); hs.add(30); hs.add(40); hs.add(20); /* 在这里我们不会出现任何异常,因为在HashSet中可以插入空插入。 */ hs.add(null); /* 这里不会有任何异常或错误 但它将被忽略,因为重复插入 不可能 */ hs.add(30); /* 在这里我们不会出现任何异常,因为 对象插入在HashSet中是可能的。 */ hs.add("Java"); //显示当前HashSet- System.out.println("Current HashSet is :" + hs); } }
输出结果
E:\Programs>javac HashSetClass.java E:\Programs>java HashSetClass Current HashSet is :[null, 20, 40, 10, Java, 30]