java TreeSet 的基础使用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java TreeSet 的基础使用

java TreeSet 的基础使用

 2012/2/6 9:31:16  MarvinIBM  程序员俱乐部  我要评论(0)
  • 摘要:TreeSet是依靠TreeMap来实现的TreeSet是一个有序集合,她的元素按照升序排列,默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable接口。TreeSet类中跟HashSet类一样也没有get()方法来获取列表中的元素,所以也只能通过迭代器方法来获取。Java代码publicclassTreeSetTest{publicstaticvoidmain(String[]args){TreeSettr=newTreeSet();tr.add
  • 标签:使用 Java
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; 
           } 
      } 



上面如果只使用学号排序,那么学号相同的就不会被打印的。
发表评论
用户名: 匿名