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 ]