Collections工具类

17 篇文章 0 订阅
5 篇文章 0 订阅

Collections工具类

  1. java.util.Collections(工具类):它里面包含了一些对Collection集合操作的一些实用方法。

常用方法:

  1. public static void shuffle(List<?> list) :打乱集合顺序。
  2. public static < T extends Comparable> void sort(List list) :将集合中元素按照默认规则排序。
  3. public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排序。
代码演示(shuffle) :
public class Demo03 {
    public static void main(String[] args) {
        //1.定义一个集合
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(50);
        list.add(15);
        list.add(25);
        list.add(77);
        list.add(63);
        list.add(48);
        list.add(32);

        System.out.println(list);//[10, 50, 15, 25, 77, 63, 48, 32]

        //打乱集合顺序
        Collections.shuffle(list);

        System.out.println(list);//[15, 25, 48, 63, 50, 32, 77, 10]

    }
}

代码演示(sort方法自排序):
  1. 调用的是:public static void sort(List<? extends Comparable> list):

  2. 自排序指:集合中的元素必须实现Comparable接口,并重写compareTo()方法。sort()方法会利用这个方法对元素进行比较,进而进行排序。

     compareTo()方法返回:
         负数:当前对象 < 参数对象,【会将当前对象排在参数对象前面】
           0: 当前对象 = 参数对象,【不排序】
         正数:当前对象 > 参数对象,【会将当前对象排在参数对象后面】
    

自定义Student类(如果要对Student对象进行排序,需要Student实现Comparable接口,并重写compareTo()方法)

	public class Student implements Comparable<Student>{
    private String name;
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    /*
        此类需要实现Comparable接口,并重写compareTo()方法
        此方法被Collections的sort()方法调用,
        用于:对象的比较,并利用比较的结果进行排序。

        比较的结果:是一个int值

        compareTo()方法返回:
        负数:当前对象 < 参数对象,【会将当前对象排在参数对象前面】
          0: 当前对象 = 参数对象,【不排序】
        正数:当前对象 > 参数对象,【会将当前对象排在参数对象后面】

     */
    @Override
    public int compareTo(Student o) {
        System.out.println("compareTo()....");
        System.out.println("当前对象:" + this.name + "," + this.age +
                            " 参数对象:" + o.name + "," + o.age);
        //第一种写法:
        //1.如果我们想按:年龄升序排序(this – 参数)
//        return this.age -  o.age;//25   18
        //2.如果我们想按:年龄降序排序(参数 – this)
//        return o.age - this.age;//18  25,会让本方法返回负数

        //第二种写法
        //1.如果我们想按:年龄升序排序
        /*if (this.age < o.age) {
            //返回负数
            return -1;
        } else if (this.age == o.age) {
            //返回0
            return 0;
        } else{
            //返回1
            return 1;
        }*/
        //2.如果我们想按:年龄降序排序
        if (this.age < o.age) {
            //返回正数
            return 1;
        } else if (this.age == o.age) {
            //返回0
            return 0;
        } else{
            //返回-1
            return -1;
        }
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

测试类:

public class Demo04 {
    public static void main(String[] args) {
        //1.定义一个集合
        ArrayList<Integer> list1 = new ArrayList<>();//Integer实现了Comparable接口
        list1.add(10);
        list1.add(50);
        list1.add(15);
        list1.add(25);
        list1.add(77);
        list1.add(63);
        list1.add(48);
        list1.add(32);

        System.out.println("原数据" + list1);//[10, 50, 15, 25, 77, 63, 48, 32]

        //排序
        Collections.sort(list1);

        System.out.println("排序后:" + list1);//[10, 15, 25, 32, 48, 50, 63, 77]


        //2.定义一个字符串集合
        ArrayList<String> list2 = new ArrayList<>();//String类也实现了Comparable接口
        list2.add("cba");
        list2.add("acb");
        list2.add("bac");
        list2.add("cab");
        list2.add("abc");
        list2.add("bca");

        System.out.println("原数据:" + list2);//原数据:[cba, acb, bac, cab, abc, bca]

        //排序
        Collections.sort(list2);

        System.out.println("排序后:" + list2);//排序后:[abc, acb, bac, bca, cab, cba]


        //3.定义一个存储Student的集合
        ArrayList<Student> stuList = new ArrayList<>();//要求Student类也要实现Comparable接口

        stuList.add(new Student("张三", 18));
        stuList.add(new Student("李四", 25));
        stuList.add(new Student("王五", 17));


        System.out.println("-------------------------------");
        System.out.println(stuList);
        //排序
        Collections.sort(stuList);
        System.out.println(stuList);
    }
}

代码演示(sort方法比较器排序):
  1. 调用:public static void sort(List list,Comparator<? super T> com ):此方法也可以对参数list中的元素进行排序。
  2. list中的元素可以不实现Comparable接口,可以使用第二个参数Comparator比较器进行排序。
  3. 另外还有一个作用,如果list中元素实现的Comparable接口,也重写了compareTo()方法,但此时不想按原来的规则排序,此时也可使用这个方法,传入一个比较器,就会使用比较器进行排序。

定义Student类(不需要实现Comparable接口)

public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

测试类:

public class Demo05 {
    public static void main(String[] args) {
        ArrayList<Integer> intList = new ArrayList<>();
        intList.add(10);
        intList.add(16);
        intList.add(7);
        intList.add(22);
        intList.add(66);
        intList.add(33);
        intList.add(88);

        System.out.println("原集合:" + intList);//原集合:[10, 16, 7, 22, 66, 33, 88]

        /*Collections.sort(intList);//结果是:升序
        System.out.println("升序:" + intList);//升序:[7, 10, 16, 22, 33, 66, 88]
        */
        //我想降序排序
        Collections.sort(intList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;//降序
            }
        });
        System.out.println("比较器降序:" + intList);//比较器升序:[88, 66, 33, 22, 16, 10, 7]


        //Student类(它没有实现Comparable接口)
        ArrayList<Student> stuList = new ArrayList<>();

        stuList.add(new Student("张三", 18));
        stuList.add(new Student("李四", 25));
        stuList.add(new Student("王五", 17));

        Collections.sort(stuList, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o2.getAge() - o1.getAge();
            }
        });

        System.out.println(stuList);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值