黑马程序员技术交流社区

标题: TreeSet集合的两种排序方式 [打印本页]

作者: 黑马-幻灭    时间: 2015-1-18 23:10
标题: TreeSet集合的两种排序方式
      
今天看了TreeSet集合的两种排序方式,终于搞懂了!!!!!!!!!
      
给大家果断分享,哪里如果有不合适的额地方,请各位大神多多指教小弟哈!
      
      
需求:定义学生对象,如果年龄和姓名相同则视为同一个人。
      
TreeSet集合的第一种排序:
      
思路:TreeSet集合底层是二叉树原理。所以想要让学生自身具备比较性,只有实现Comparable接口,覆盖其中的compareTo方法,将要比较的对象传递进去。
  1. public class Person implements Comparable{
  2.         private String name;
  3.         private int age;
  4.         public Person() {
  5.                 super();
  6.                 // TODO Auto-generated constructor stub
  7.         }
  8.         public Person(String name, int age) {
  9.                 super();
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }
  13.         public String getName() {
  14.                 return name;
  15.         }
  16.         public void setName(String name) {
  17.                 this.name = name;
  18.         }
  19.         public int getAge() {
  20.                 return age;
  21.         }
  22.         public void setAge(int age) {
  23.                 this.age = age;
  24.         }
  25.         @Override
  26.         //compareTo 方法返回的是int类型的。
  27.         public int compareTo(Object obj) {
  28.                 // TODO Auto-generated method stub
  29.                 if(!(obj instanceof Person))
  30.                         try {
  31.                                 throw new Exception("不是学生对象");
  32.                         } catch (Exception e) {
  33.                                 // TODO Auto-generated catch block
  34.                                 e.printStackTrace();
  35.                         }
  36.                 Person p=(Person)obj;
  37.                 if(this.age > p.age)
  38.                         return 1;
  39.                 if(this.age==p.age)
  40.                 {
  41.                         return this.name.compareTo(p.name);
  42.                 }
  43.                 return -1;
  44.         }
  45.         }
复制代码
      
/TreeSet集合的第二种排序方法
      
//就是当元素本身不具备比较性或者元素本身具备的比较性不是我们所需要的,这是就需要让集合本身在一初始胡的时候就具备比较性,所以定义比较器,让它作为参数传递给TreeSet的构造函数。
      
当这两种方式都存在时,应该是以比较器的这种为主。
  1. class Mycompare implements Comparator
  2. {
  3.         @Override
  4.         public int compare(Object o1, Object o2) {
  5.                 // TODO Auto-generated method stub
  6.                 String s1=(String)o1;//类型转换
  7.                 String s2=(String)o2;
  8.                 //int类型封装类里面有compareTo方法,用来比较两个元素的长度
  9.                 int num= new Integer(s1.length()).compareTo(s2.length());
  10.                 if(num==0)
  11.                         return s1.compareTo(s2);
  12.                 return -1;
  13.         }
  14.        
  15. }

  16. import java.util.Comparator;
  17. import java.util.Iterator;
  18. import java.util.TreeSet;

  19. public class ArrayTest {
  20.         public static void main(String[] args) {
  21.                 TreeSet ts=new TreeSet(new Mycompare());
  22.                
  23.                 ts.add(new Person("lisi02",19));
  24.                 ts.add(new Person("lisi01",23));
  25.                 ts.add(new Person("lisi03",25));
  26.                 ts.add(new Person("lisi05",26));
  27.                
  28.                 //获取迭代器
  29.                 Iterator it=ts.iterator();
  30.                 while(it.hasNext())
  31.                 {
  32.                         Person p=(Person)it.next();
  33.                         System.out.println(p.getName()+"::"+p.getAge());
  34.                 }
  35.         }
  36. }
复制代码


   
   






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2