java中Collections类的常见操作

来源:互联网 发布:值得下载的app 知乎 编辑:程序博客网 时间:2024/06/02 02:57

注意:
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<Integer> integers = new ArrayList<Integer>();        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<T> list, Comparator<? super T> c)方法         */        List<ParamsTable> 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获取集合中的最大值的结果为:759ParamsTable [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]
0 0
原创粉丝点击