对容器及数组排序关键语句都为:Collections.sort(list, new my_compare());Collection为系统内类,其中包含方法sort,要传入两个参数,第一个为容器或数组,第二个为比较器,所谓比较器就是自己定义的比较规则,比较规则来自于自定义类my_compare,my_compare要继承接口Comparator
在这里我们使用的是Comparator比较器,其是一种与对象独立的比较器比较方式型如为Comparator(object O1,object O2),而另一种比较器Comparable是一种属于对象一种方法的比较器,比较形如O1.CompareTo(O2)。一般来说我们自定义复杂类型使用Comparator,而简单的类型如字符串、时间、整型等用Comparable
下面使用Comparator比较器对货物进行排序,货物具有价格、存量、时间属性,排序时候先看价格从低到高,然后看存量,再看时间
第一步:定义数组/容器中要存入什么
package Comparactor;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Goods {
private int price;
private int numbel;
private Date date;
public Goods() {
super();
}
public Goods(int price, int numbel, Date date) {
super();
this.price = price;
this.numbel = numbel;
this.date = date;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getNumbel() {
return numbel;
}
public void setNumbel(int numbel) {
this.numbel = numbel;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
//用於System.out.println(list1);
public String toString() {
// TODO Auto-generated method stub
return "價格:"+this.price+" 存量:"+this.numbel+"時間:"+new SimpleDateFormat("yy-mm-dd hh:mm:ss").format(this.date)+"\n";
}
}
第二步,定义比较器
package Comparactor;
import java.util.Comparator;
public class my_compare2 implements Comparator<Goods> {
//按照价格、存量、时间次序来
@Override
public int compare(Goods o1, Goods o2) {
int tag = 0;
tag = (o1.getPrice() - o2.getPrice());
if (tag == 0) {
tag = (o1.getNumbel() - o2.getNumbel());
if (tag == 0) {
tag = (o1.getNumbel() - o2.getNumbel());
if (tag == 0) {
tag = o1.getDate().compareTo(o2.getDate());
}
}
}
return tag;
}
}
第三步,往容器/数组中加入实体,并使用Collections.sort排序
package Compare_package;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import Comparactor.Goods;
import Comparactor.my_compare;
import Comparactor.my_compare2;
public class test_1 {
public static void main(String[] args) {
List<Goods> list1=new ArrayList<Goods>();
list1.add(new Goods(123,43,new Date()));
list1.add(new Goods(23,73,new Date()));
list1.add(new Goods(673,3453,new Date(System.currentTimeMillis()+60*60*1000)));//當前時間往前后推一小時
list1.add(new Goods(783,464,new Date()));
list1.add(new Goods(53,4566,new Date(System.currentTimeMillis()-60*60*1000)));//當前時間往前前推一小時
System.out.println("-------------排序前");
System.out.println(list1);
Collections.sort(list1, new my_compare2());
System.out.println("-------------排序后");
System.out.println(list1);
}
}