TreeSet是依靠TreeMap来实现的
TreeSet是一个有序集合,她的元素 按照升序排列,默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable
接口。
TreeSet类中跟HashSet类一样也没有get()方法来获取列表中的元素,所以也只能通过迭代器方法来获取。
Java代码
public class TreeSetTest
{
public static void main(String[] args)
{
TreeSet tr =new TreeSet();
tr.add("zhangshan");
tr.add("wangwu");
tr.add("lisi");
Iterator it =tr.iterator();
while(it.
hasNext())
{
System.out.println(it.next());
}
}
}
输出结果为:lisi wangwu zhangshan
这是因为TreeSet是一个有序并且默认按自然顺序排列,而不像哈希表那样毫无规律。
当然,你也可以在创建TreeSet对象时传递一个比较器来实现你自己的排序方式:
Java代码
import java.util.*;
public class TreeSetTest
{
public static void main(String[] args)
{
//传递一个比较器来实现你自己的排序方式
TreeSet tr =new TreeSet(new Student.StudentComparator());
tr.add(new Student(3,"wnagwu"));
tr.add(new Student(2,"zhangshan"));
tr.add(new Student(2,"lisi"));
tr.add(new Student(1,"xiejin"));
Iterator it =tr.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
Student类:
Java代码
class Student implements Comparable,Comparator
{
int num;
String name;
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public int compareTo(Object o)
{
Student st =(Student)o;
int result;
result= num>st.num?1:(num==st.num?0:-1);
//如果学号相等,就按姓名排列
/*if(result==0)
{
return name.compareTo(st.name);
}*/
return result;
}
//实现Comparator接口并实现它的抽象方法
public int compare(Object o1,Object o2)
{
Student st1 =(Student)o1;
Student st2 =(Student)o2;
return st1.name.compareTo(st2.name);
}
//重写toString()方法,因为如果不重写,打印出来的是16进制代码
public String toString()
{
return "num="+num+"; name="+name;
}
public static class StudentComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
Student st1 =(Student)o1;
Student st2 =(Student)o2;
int result;
result=st1.num>st2.num?1:(st1.num==st2.num?0:-1);
if(result==0)//如果学号相等 就进行名字排序
{
result=st1.name.compareTo(st2.name);
}
return result;
}
}
}
上面如果只使用学号排序,那么学号相同的就不会被打印的。