java中Collections类的常见操作

注意:
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 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]

你可能感兴趣的:(java中Collections类的常见操作)