collections中的sort使用方法

本文详细介绍了Java集合框架中Collections.sort()方法的两种用法:一种是使用默认排序,要求集合元素实现Comparable接口并重写compareTo方法;另一种是自定义排序,通过传入Comparator对象实现。通过示例代码展示了如何对Person和Student类的实例按年龄进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

collections是一个集合操作工具类,主要实现对集合的操作,其中sort方法是对list集合元素进行排序,分别有两种形式,分别为:sort(List list) 、sort(List list, Comparator<? super T> c)
下面对其分别进行介绍:

一、sort(List list)

  1. 功能:此方法根据元素的自然顺序对指定列表按升序进行排序。
  2. 要求:此方法要求集合元素有自己的排序规则,即要求元素必须实现了comparable接口,且重写了compareTo方法。也就是说对于集合中的任意两个元素e1,e2,e1.compareTo(e2)不能抛出异常。
  3. 参数:list集合的实例对象(ArrayList对象或者linledlist),不可以是set集合对象。
  4. 实例:自定义一个person类,包含name和age,要求根据age排序。

person类定义:

public class person implements Comparable<person> { //实现comparable接口
    private String name;
    private int age;

    public person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(person o) {  //重写compareTo方法
        return this.getAge()-o.getAge();  //  根据age进行升序排序,若反过来则是降序
    }
}

主函数:

import java.util.ArrayList;
import java.util.Collections;

public class Demo01Stringcomp {
    public static void main(String[] args) {
        ArrayList<person> list1=new ArrayList<>();
        list1.add(new person("张三",25));
        list1.add(new person("李四",20));
        list1.add(new person("王五",20));
        Collections.sort(list1);
        System.out.println(list1);
    }

}

二、sort(List list, Comparator<? super T> c)

  1. 功能:根据指定比较器Comparator产生的排序规则对list集合对象进行排序;
  2. 参数:List list — list集合的实例对象(ArrayList对象或者linledlist);
    Comparator<? super T> c—Comparator接口产生的对象(可以使用匿名内部类);
  3. 要求:不再要求集合元素具有自己的排序规则,即不再需要实现comparable接口;
  4. 实例:自定义一个student类,包含name和age属性,根据age排序;

student类定义:

public class students {
    private String name;
    private int age;

    public students(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public students() {
    }

    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 "students{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

主函数:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Demo02Comparator {
    public static void main(String[] args) {
        ArrayList<students> stu = new ArrayList<>();
        stu.add(new students("rank",20));
        stu.add(new students("Jack",16));
        stu.add(new students("Tom",18));
        /*使用匿名内部类创建Comparator接口的对象作为参数
          匿名内部类:直接通过接口名称创建对象,省去接口的实现类
          其格式为:接口名称 对象名 = new  接口名称 () {覆盖重写接口的所有抽象方法}
         */
        Collections.sort(stu, new Comparator<students>() {
            @Override
            public int compare(students o1, students o2) {
                return o1.getAge()-o2.getAge();  //根据age进行升序排序
            }
        });
        System.out.println(stu);
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值