Set接口的实现类HashSet和TreeSet的区别

时间:2021-11-29 15:33:58
Set接口有两个实现类HashSet和TreeSet。Set是集合的意思,这个接口实现类的特点是集合中不含有重复元素,例如向Set中插入1,1,2,3,这四个数后再输出结果是1,2,3因为Set中重复插入的1被舍弃掉了。HashSet和TreeSet的不同就在于如何判断两个数是否相同的方法上。 TreeSet判断两个对象是否相同的方法是Comparable接口中的compareTo()方法(public void int compareTo(Object o)方法不仅可以比较是否相等,还可以比较大小,如果相等则返回0,调用者大于参数则返回正数,否则返回负数),而HashSet用的则是继承自Object类的equals()方法(public boolean equals(Object o)方法只可以比较是否相等,相等返回true,反之返回false)。 所以可以得到添加到TreeSet中的对象必须实现Comparable接口。同时如果使用HashSet则最好重写equals()方法。另外Set集合的输出顺序与输入顺序无关,但是TreeSet由于使用compareTo()方法来进行比较,所以TreeSet集合输出的时候会按照升序的顺序输出存在集合中的对象,下面附上一个演示代码
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class TestSet {
public static void main(String [] args)
{
Set<Integer> hashSet = new HashSet<Integer>();
Set<Integer> treeSet = new TreeSet<Integer>();
hashSet = fillSet(hashSet);
System.out.println(hashSet);
treeSet = fillSet(treeSet);
System.out.println(treeSet);
}
public static Set<Integer> fillSet(Set<Integer> set)
{
while(set.size() < 7)
{
set.add((int)(Math.random()*35+1));
}
return set;
}
}