treeSet是set下面一个很重要的集合,它可以对set集合下面的元素进行排序,它底层的数据结构是二叉树,二叉树,在数据结构这门课里面讲到过,我也没学好。
因为set集合里面的元素是不可以重复的,那treeSet集合是怎样保证元素的唯一性呢?其实就是依据下面的compareTo方法,在用到二叉树去取元素的时候,它不会去管compareTo方法里面是怎样实现的,它只关心函数返回的值是正数,负数还是零。
运用treeSet排序有两种方式,一种是在元素本身具备比较性的前提下,元素需要去实现一个comparable接口,覆盖其中的compareTo方法,定义自己的比较形式,因为这种比较是按照数据的自然大小顺序,所以这种方式也成为元素的自然顺序或者默认顺序。
另一种排序方法是在元素自身不具备比较性或者具备的比较性不是我们那时所需要的情况下,这时候我们就需要然集合自身具备比较性(这里可以用到匿名内部类),即让集合再初始化的时候就有了比较性。
当两种排序都存在的时候,以比较器为主。
import java.util.*;
class Demo
{
public static void main(String []args)
{
TreeSet ts=new TreeSet(new myCompare());
ts.add("ancd");
ts.add("fhurfhe");
ts.add("def");
ts.add("adf");
Iterator it=ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class myCompare implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1=(String)o1;
String s2=(String)o2;
int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(num==0)
return s1.compareTo(s2);
return num;
}
}
在以上例子中,就是一个元素本身不具备比较性的情况,所以我们定义了自己的比较方法去实现了比较器接口,其实就是那么简单的几个步骤而已
1:定义自己的比较类实现comparator接口。
2:复写compare方法(因为是要比较两个数,所以肯定要传入两个参数,且两个参数的类型不详,所以用上帝的类型)
3:对传入的参数类型进行转型
4:定义自己的比较方式
5:把接口的对象传给TreeSet集合的对象,让集合具有比较性。
6:最后就集合的基本操作了。