MarvinIBM 发表于 2013-2-3 14:36:12

java TreeSet 的基础使用

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;
         }
      }
}


上面如果只使用学号排序,那么学号相同的就不会被打印的。
页: [1]
查看完整版本: java TreeSet 的基础使用