黑马程序员技术交流社区

标题: 本人对comparator和comparable的用法 [打印本页]

作者: 草上飞    时间: 2012-10-28 18:02
标题: 本人对comparator和comparable的用法
import java.util.*;
/*
当元素自身不具备比较性时,或者具备的不是所需要的
  这是需要让容器具备比较性
  定义比较器,将比较器传递给treeset集合的构造函数
  但两种排序都存在,一比较器为主
*/
class Student implements Comparable//在tree中学生类必须要实现comparable接口是他具备强制的比较性
{
private String name;
private int age;
Student(String name,int age)
{
  this.name=name;
  this.age=age;
}
//这是按照年龄来排序的
public int compareTo(Object obj)//比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
{
  if(!(obj instanceof Student))
   throw new RuntimeException("此对象不是学生");
  Student stu=(Student)obj;
  if(this.age>stu.age)
   return 1;
  if(this.age==stu.age)//如果年龄相同则比较姓名
  {
   return this.name.compareTo(stu.name);
  }
      return -1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
//自定义一个比较器按姓名来排序
class Mycompart implements Comparator
{
public int compare(Object obj1, Object obj2)
{
  Student s1=(Student)obj1;
  Student s2=(Student)obj2;  
  int num=s1.getName().compareTo(s2.getName());
  if(num==0)
  {
       return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
     }
  return num;
}
}
class Treesetdemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
  TreeSet ts=new TreeSet(new Mycompart());
  ts.add(new Student("wwu1",34));
  ts.add(new Student("wwu2",264));
  ts.add(new Student("wwu2",24));
  ts.add(new Student("wwurtr3",54));
  ts.add(new Student("wwu3",5564));
  ts.add(new Student("wwu3",54));
  ts.add(new Student("wwu3",57674));
  ts.add(new Student("wwu4",38));
  for (Iterator it=ts.iterator();it.hasNext() ; )
  {
   Object obj=it.next();
   Student stu=(Student)obj;
   
   sop(stu.getName()+"---"+stu.getAge());
  }
}
}






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