使用Java中Collections工具类和Comparator比较器使用

Collections工具类

  • 介绍

    • Collections是单列集合的工具类,里面所有的方法都是静态方法,可以对集合进行一些操作。
  • 常用方法(常用方法

    方法说明
    static void shuffle(List<?> list)随机打乱集合元素的顺序
    static void sort(List list)集合的排序(从小到大)
    static void sort(List list,Comparator<? super T> )按照指定的方式排序
  • 代码示例

    package com.itheima_01;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Test01 {
        public static void main(String[] args) {
            //创建集合
            List<Integer> list = new ArrayList<>();
            list.add(11);
            list.add(33);
            list.add(66);
            list.add(123);
            list.add(9);
    
            //static void shuffle(List<?> list)
            //随机打乱集合元素的顺序
            Collections.shuffle(list);
            System.out.println("打乱顺序:" + list);
    
    
            //static <T> void sort(List<T> list)
            //集合的排序(从小到大)
            Collections.sort(list);
            System.out.println("排序之后:" + list);
    
        }
    }
    
  • 字符串的比较规则

    package com.itheima_01;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Test02 {
        public static void main(String[] args) {
            //创建集合
            ArrayList<String> list = new ArrayList<>();
    
            list.add("abc");
            list.add("def");
            list.add("abcd");
            list.add("123");
            list.add("a12");
            list.add("金泫雅");
    
            //排序
            Collections.sort(list);
            //从小到大
            /*
                字符串排序规则:
                    从前往后一个一个判断字母的字符值
             */
            System.out.println(list);
    
            System.out.println('a'+0);    //97
            System.out.println('金'+0);   //26611
        }
    }
    

Comparator比较器

  • compare方法的解释

    参数:
        o1是要比较的元素
        o2是已经排好序的元素
    返回值:
    	如果返回的是一个正数,会把元素放在后面
        如果返回的是一个负数,会把元素放在前面
        如果返回的是一个零,认为元素大小相同,不移动元素
    
    
  • 整数类型从大到小排列

    package com.itheima_01;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    /*
        匿名内部类的作用是简化代码,不用单独定义子类
        格式:
            new 父类/接口(){
                重写方法;
            };
     */
    public class Test03 {
        public static void main(String[] args) {
            //创建集合
            List<Integer> list = new ArrayList<>();
            list.add(11);
            list.add(33);
            list.add(56);
            list.add(123);
            list.add(9);
    
            //排序
            Collections.sort(list,new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    //return o1 - o2;   //从小到大
                    //return o2 - o1;     //从大到小
                    return -1;
                }
            });
    
            System.out.println(list);
        }
    }
    
  • 自定义类型按照年龄从小到大排列

    package com.itheima_01;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Test04 {
        public static void main(String[] args) {
            //创建集合
            ArrayList<Student> list = new ArrayList<>();
    
            //添加
            list.add(new Student("迪丽热巴",38));
            list.add(new Student("金泫雅",23));
            list.add(new Student("唐嫣",28));
    
            //排序
            //存储的是学生对象,学生对象没有排序比较规则
            //Collections.sort(list);
    
            //给出排序规则
            Collections.sort(list, new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    //要求:年龄从小到大排序
                    return o1.getAge() - o2.getAge();
                }
            });
    
            //打印
            System.out.println(list);
        }
    }
    
  • 自定义类型按照年龄从小到大排列,如果年龄相同,姓名短的在前,姓名长的在后

    package com.itheima_01;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Test05 {
        public static void main(String[] args) {
            //创建集合
            ArrayList<Student> list = new ArrayList<>();
    
            //添加元素
            list.add(new Student("唐嫣",38));
            list.add(new Student("金泫雅",23));
            list.add(new Student("迪丽热巴",28));
            list.add(new Student("貂蝉",28));
            list.add(new Student("杨幂",28));
    
            //排序
            //按照年龄从小到大排列,如果年龄相同,姓名短的在前,姓名长的在后
            Collections.sort(list, new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                     if(o1.getAge() == o2.getAge()){
                         //年龄相同
                         //比较姓名从短到长
                         return o1.getName().length() - o2.getName().length();
                     }else{
                         //年龄不相同
                         //年龄从小到大
                         return o1.getAge() - o2.getAge();
                     }
                }
            });
            //打印
            System.out.println(list);
        }
    }
    

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值