【Java-32】java使用Comparator比较器进行容器、数组自定义排序

对容器及数组排序关键语句都为: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);

	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42034217/article/details/86546607