java ArrayList 排序

本文详细介绍了如何使用ArrayList的sort方法对对象进行排序,包括单一条件和复合条件的排序示例。通过Person类的age和sex属性展示了升序和降序排序,并提供了排序代码实现。

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

ArrayList 保存的是对象,排序顾名思义按照某一个或者某一些条件对ArrayList保存的对象进行排序。

方法:public void sort(Comparator<? super E> c)

排序条件

排序分类:排序分为正序和倒序,如果条件返回值大于0则正序、小于0则倒序、等于则相等。

举例:

@Data

@ToString

public class Person {

        private String name;

        private Integer age;

        private Integer sex;

}

public static void main(String[] args) {
    ArrayList<Person> people = new ArrayList<>();
    for (int i = 0; i < 50; i++) {
        Person person = new Person();
        person.setAge(50 - i);
        person.setName("a" + i);
        person.setSex(i % 2);
        people.add(person);
    }
1.单一条件排序
people.sort(Comparator.comparing(Person::getSex).reversed());
for (Person person : people) {
    System.out.println(person);
}

2.复合条件排序people.sort(Comparator.comparing(Person::getSex).reversed().thenComparing(Person::getAge));
    for (Person person : people) {
        System.out.println(person);
    }
}

Java中,`ArrayList` 是一种动态数组,可以方便地进行插入和删除操作。要对 `ArrayList` 进行排序,你可以使用 `Collections.sort()` 方法。这里有两个示例: 1. **自然顺序排序**[^1]: 如果你的 `ArrayList` 包含的对象实现了 `Comparable` 接口并且有一个可比较的方法,如 `Person` 类中的姓名,那么可以直接使用 `Collections.sort()`。例如: ```java // 假设Person类重写了getName()方法以实现Comparable接口 Person p1 = new Person("lcl", 28); Person p2 = new Person("fx", 23); Person p3 = new Person("wqx", 29); ArrayList<Person> list = new ArrayList<>(); list.add(p1); list.add(p2); list.add(p3); // 自然顺序排序 Collections.sort(list); ``` 现在,`list` 应该按照姓名的字母顺序排列。 2. **自定义排序** 或者 **逆序排序**: 如果你想按照特定字段(如年龄)进行排序,可以创建一个 `Comparator` 实现 `compare()` 方法。比如,如果你想按年龄降序排序: ```java // 定义一个Comparator class AgeComparator implements Comparator<Person> { @Override public int compare(Person p1, Person p2) { return Integer.compare(p2.getAge(), p1.getAge()); } } // 使用自定义Comparator AgeComparator comp = new AgeComparator(); Collections.sort(list, comp); ``` 或者如果想按照姓名升序或降序排列,你可以调用 `Collections.reverseOrder()` 来获得一个降序比较器: ```java Collections.sort(arrayList, Collections.reverseOrder()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值