首先,我们将看到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]