注意:
1、Collection是一个接口,而Collections是一个类
2、Collections的排序有两种,一种排序是直接调用了 “集合中” 数据类型的compareTo方法,且此类中必须 实现Compareble接口,并重写了compareTo
另一种是调用 了外部的比较器,这个外部的比较器其实就是一个单独的类,这个类要实现Comparetor接口,并重写compareTo
3、虽然两者都重写了compareTo方法,但它们的接口是不一样,这点一定要注意
**********************************************测试实体类**********************************************
package com**.CollectionDemo;
import java.util.Date;
/**
* @author Ckinghan
* @描述:测试实体类
*/
public class ParamsTable {
private Integer id;
private String paramsName;
private String paramsVal;
private Date createDate;
public ParamsTable() {
super();
}
public ParamsTable(Integer id, String paramsName, String paramsVal, Date createDate) {
super();
this.id = id;
this.paramsName = paramsName;
this.paramsVal = paramsVal;
this.createDate = createDate;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getParamsName() {
return paramsName;
}
public void setParamsName(String paramsName) {
this.paramsName = paramsName;
}
public String getParamsVal() {
return paramsVal;
}
public void setParamsVal(String paramsVal) {
this.paramsVal = paramsVal;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Override
public String toString() {
return "ParamsTable [id=" + id + ", paramsName=" + paramsName + ", paramsVal=" + paramsVal + ", createDate="
+ createDate + "]";
}
}
**********************************************外部比较器**********************************************
package com**.CollectionDemo;
import java.util.Comparator;
/**
* @author Ckinghan
* @描述:params的外部比较器
* @注意: 这里实现的是Comparator接口,而不是在实体上实现的Compareble接口
* 这里将Comparator的参数类型固定死了为ParamsTable
* 用于测试Collections类的sort排序(sort的排序分两种方法,这里说的是须要比较器的方法)
*/
public class ParamsComparator implements Comparator<ParamsTable>{
/**
* @描述:自定义的比较器
* @param params1 要比较的参数
* @param params2 要比较的参数
* @return 返回数字,0代码 params1 等于 params2,
* 1代表params1大于params2,
* 负数代表params1 小于params2
* @创建时间:2017年5月10日11:37:31
*/
@Override
public int compare(ParamsTable params1, ParamsTable params2) {
int val = params1.getId() - params2.getId();
if(val== 0 && params1.getParamsName() != null){
val = params1.getParamsName().compareTo(params2.getParamsName());
if(val == 0){
val = params1.getCreateDate().compareTo(params2.getCreateDate());
}
}
return val;
}
}
**********************************************测试类**********************************************
package com**.CollectionDemo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
* @author Ckinghan
* @描述:测试Collections集合类的方法
*/
public class CollectionsDemo {
public static void main(String[] args) {
/**
* 注意:Collection是接口,而Collections是集合的工具类,两者是不一样的。
*/
/**
* 创建一个arrayList集合,并随机赋值
*/
List integers = new ArrayList();
Random random = new Random();
for(int i = 0; i < 7; i ++){
integers.add(random.nextInt(1000));
}
System.out.println("创建的集合的值为:"+integers);
/**
*使用Collections.sort进行排序(注意,系统提供的类大都已经实现了compareble接口,所以可以直接进行排序)
*/
Collections.sort(integers);
System.out.println("使用Collections.sort方法排序后的结果为:"+integers);
/**
* 使用Collections.reverse将已经的数据顺序倒过来
*/
Collections.reverse(integers);
System.out.println("使用Collections.reverse将已经的数据顺序倒过来的结果为:"+integers);
/**
* Collections.shuffle 可以打乱已有的集合顺序
*/
Collections.shuffle(integers);
System.out.println("使用Collections.shuffle方法随机分配顺序后的结果为:"+integers);
/**
* 使用Collections.max获取集合中的最大值
*/
int maxVal = Collections.max(integers);
System.out.println("使用Collections.max获取集合中的最大值的结果为:"+maxVal);
/**
* 使用Collections.synchronizedCollection将integers变为同步线程的数据
* 相当于加了一把锁,可防止多个线程同时对integers进行操作
*/
Collections.synchronizedCollection(integers);
/**
* 最后说一个使用外部比较器排序的功能
* Collection.sort(List list, Comparator super T> c)方法
*/
List paramsTables= new ArrayList<>();
paramsTables.add(new ParamsTable(1, "table", "Emp", new Date()));
paramsTables.add(new ParamsTable(2, "prefix", "Table", new Date()));
paramsTables.add(new ParamsTable(1, "suffix", "T", new Date()));
paramsTables.add(new ParamsTable(1, "val", "Emp", new Date()));
paramsTables.add(new ParamsTable(5, "groud", "Emp", new Date()));
//使用外部比较器排序
Collections.sort(paramsTables, new ParamsComparator());
//打印排序后的数据
for(ParamsTable paramsTable : paramsTables){
System.out.println(paramsTable);
}
/**
* 其它Collections还有很多方法,有兴趣可以查询API
*/
}
}
*********************************************执行结果*********************************************
创建的集合的值为:[28, 24, 360, 726, 250, 759, 545]
使用Collections.sort方法排序后的结果为:[24, 28, 250, 360, 545, 726, 759]
使用Collections.reverse将已经的数据顺序倒过来的结果为:[759, 726, 545, 360, 250, 28, 24]
使用Collections.shuffle方法随机分配顺序后的结果为:[726, 28, 360, 24, 250, 759, 545]
使用Collections.max获取集合中的最大值的结果为:759
ParamsTable [id=1, paramsName=suffix, paramsVal=T, createDate=Wed May 10 12:41:55 CST 2017]
ParamsTable [id=1, paramsName=table, paramsVal=Emp, createDate=Wed May 10 12:41:55 CST 2017]
ParamsTable [id=1, paramsName=val, paramsVal=Emp, createDate=Wed May 10 12:41:55 CST 2017]
ParamsTable [id=2, paramsName=prefix, paramsVal=Table, createDate=Wed May 10 12:41:55 CST 2017]
ParamsTable [id=5, paramsName=groud, paramsVal=Emp, createDate=Wed May 10 12:41:55 CST 2017]