Java SE TreeSet(实现Comparable接口和Comparator匿名类)根据属性排序示例

来源:互联网 发布:网络直播底线失守照片 编辑:程序博客网 时间:2024/05/29 04:43

ava SE TreeSet(Comparable和Comparator)属性排序示例

package day15;

import java.text.SimpleDateFormat;

import java.util.Comparator;
import java.util.Date;
import java.util.TreeSet;


public class CompareDemo {
 public static void main(String[] args) {

  //根据id排序
  TreeSet<Box> byid = new TreeSet<Box>();
  byid.add(new Box (10,20,new Date(2011-1900,8-1,1)));//构造器:Date(int year, int month, int day)已过时。
  byid.add(new Box (2,12,new Date(2011-1900,8-1,2)));
  byid.add(new Box (42,11,new Date(2011-1900,8-1,3)));
  byid.add(new Box (34,31,new Date(2011-1900,8-1,4)));
  System.out.println("根据id排序"+byid);

  //根据size排序  
  TreeSet bysize = new TreeSet(new Comparator(){
   @Override
   public int compare(Object o1,Object o2){
    Box b1 = (Box)o1;
    Box b2 = (Box)o2;
    return b1.size - b2.size;
   }
  });
  bysize.addAll(byid);
  System.out.println("根据id排序"+bysize);
  
  //根据date排序
  TreeSet bydate = new TreeSet(new Comparator(){
   @Override
   public int compare(Object o1, Object o2) {
    Box b1 = (Box)o1;
    Box b2 = (Box)o2;
    return b1.date.after(b2.date)?1:-1;
   }
  });
  bydate.addAll(byid);
  System.out.println("根据date排序"+bydate);
  
  
  //根据date排序
  TreeSet<Box> bydate2 = new TreeSet<Box>(new Comparator(){
   @Override
   public int compare(Object o1, Object o2) {
    Box b1 = (Box)o1;
    Box b2 = (Box)o2;
    return b1.date.after(b2.date)?1:-1;
   }
  });
  bydate2.add(new Box (10,20,"2011-7-1"));
  bydate2.add(new Box (2,12,"2011-7-2"));
  bydate2.add(new Box (42,11,"2011-7-3"));
  bydate2.add(new Box (34,31,"2011-7-4"));
  System.out.println("根据date排序"+bydate);
 }
 

}


class Box implements Comparable{
 int id;
 int size;
 Date date;
 public Box(){}
 
 public Box(int id, int size){
  this.id = id;
  this.size = size;
  this.date = new Date();
 }
 public Box(int id, int size, Date date){
  this.id = id;
  this.size = size;
  this.date = date;
 }
 
 public Box(int id, int size ,String str){
  this.id = id;
  this.size = size;
  try{
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   this.date = sdf.parse(str);  
  }catch(java.text.ParseException e){
   e.printStackTrace();
  }
 }
 
 @Override
 public int compareTo(Object o) {
  Box b = null;
  if(o instanceof Box)
   b = (Box)o;
  return this.id - b.id;
 }
 
 @Override
 public int hashCode() {
  return id;
 }
 
 @Override
 public boolean equals(Object obj) {
  if(obj == null)
   return true;
  if(obj instanceof Box){
   Box b = (Box)obj;
   return this.id == b.id;
  }
  return false;
 }
 
 @Override
 public String toString() {
  SimpleDateFormat dsf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String s = dsf.format(date);
  //直接toString()方法也是可以的
  return "id:"+this.id+",size:"+this.size+" ,date:"+s+" ";
 }
 
}

//       根据id排序[id:2,size:12 ,date:2011-08-02 00:00:00 , id:10,size:20 ,date:2011-08-01 00:00:00 , id:34,size:31 ,date:2011-08-04 00:00:00 , id:42,size:11 ,date:2011-08-03 00:00:00 ]
//       根据id排序[id:42,size:11 ,date:2011-08-03 00:00:00 , id:2,size:12 ,date:2011-08-02 00:00:00 , id:10,size:20 ,date:2011-08-01 00:00:00 , id:34,size:31 ,date:2011-08-04 00:00:00 ]
//       根据date排序[id:10,size:20 ,date:2011-08-01 00:00:00 , id:2,size:12 ,date:2011-08-02 00:00:00 , id:42,size:11 ,date:2011-08-03 00:00:00 , id:34,size:31 ,date:2011-08-04 00:00:00 ]
//       根据date排序[id:10,size:20 ,date:2011-08-01 00:00:00 , id:2,size:12 ,date:2011-08-02 00:00:00 , id:42,size:11 ,date:2011-08-03 00:00:00 , id:34,size:31 ,date:2011-08-04 00:00:00 ]

0 0