【Java-32】对List容器、数组排序

Collections是一个对List容器进行操作的类,内含对容器的排序、替换、洗牌、反转等操作

对List容器排序关键语句为: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

对数组进行排序与List进行排序相比区别只在于Collections换成了Arrays

下面使用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);

	}
}

4.数组排序(常规数据类型为例)

比较器:

package Comparactor;

import java.util.Comparator;
/**
 * 写比较器
 * @author 慧天地
 *
 */
public class my_compare implements Comparator<String> {

	@Override
	public int compare(String o1, String o2) {
		int len1=o1.length();
		int len2=o2.length();
		return len1-len2;
	}
}

排序:

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 java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

import Comparactor.Goods;
import Comparactor.my_compare;
import Comparactor.my_compare2;

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

		Date date[]=new Date[3];
		date[0]=new Date();
		date[1]=new Date(System.currentTimeMillis()+60*60*1000);
		date[2]=new Date(System.currentTimeMillis()-60*60*1000);
		Arrays.sort(date);
		System.out.println(Arrays.toString(date));
		
//		含有比较器数组排序
		String a[] = { "rtferfg","her","ewfefr","wer" };
		System.out.println("-------------Coparctor数组---------------");//按长度
		System.out.println("Coparctor数组排序前");
		System.out.println(Arrays.toString(a));
		//Collections(a,new my_compare());
		Arrays.sort(a,new my_compare());
		System.out.println("Coparctor数组排序后");
		System.out.println(Arrays.toString(a));
		
		
	}
}

 

发布了222 篇原创文章 · 获赞 86 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览