Java 关于List 的排序

本文介绍了一种使用Java实现的自定义对象排序方法。通过创建一个实现了Comparable接口的Car类,并重写compareTo方法来定义排序规则,最后利用Collections.sort()方法完成排序。示例中包含了具体的代码实现及运行结果。

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

对于数据长度不定 又需要数据按照一定的规律输出的可以参考如下代码

基本思路

  1. 利用集合的API 来做 本文方案。
    2.全靠将list 转换成对应长度的数组进行排序。

本文按照第一种思路完成代码

package test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class ListTest {



    static class Car implements Comparable<Car>
    {

      String carStr;
      String carNum;
      String carinfos;
      int    intCarNum;
      public Car(String carinfo)
      {
        int start = carinfo.indexOf("(");
        carNum = carinfo.substring(0, start);
        intCarNum = Integer.parseInt(carNum);
        carinfos =  carinfo.substring(start, carinfo.length());
        carStr = carinfo;

      }
    @Override
    /*这个是主要的方法 根据自己的需求进行修改*/
    public int compareTo(Car car) {

        if(intCarNum > car.intCarNum)
        {
            return 1;
        }

        if(intCarNum < car.intCarNum)
        {
            return -1;
        }

        return 0;
    }




    }




    public static void main(String[] args) 
    {
        List<Car> carinfos = new ArrayList<Car>();
        Car car1 = new Car("105(AD,0)");
        Car car2 = new Car("101(AB,0)");
        Car car3 = new Car("102(DE,1,3,AB)");
        carinfos.add(car1);
        carinfos.add(car2);
        carinfos.add(car3);

        Collections.sort(carinfos);

        Iterator<Car> it = carinfos.iterator();
        while(it.hasNext())
        {
            Car car = it.next();
            System.out.println(car.carStr);

        }



    }
}

注释掉排序后的结果如下
这里写图片描述

正常的效果如下
这里写图片描述

Java 中对 `List` 进行排序,可以通过多种方法实现,具体取决于使用场景、Java 版本以及是否需要自定义排序逻辑。以下是几种常见的排序方式: ### 使用 `Collections.sort()` 方法排序 对于简单的类型如 `String` 或 `Integer`,可以直接使用 `Collections.sort()` 方法进行排序: ```java List<String> names = new ArrayList<>(); List<Integer> ages = new ArrayList<>(); Collections.sort(names); Collections.sort(ages); ``` 此方法适用于不需要自定义排序规则的情况,且数据类型本身已经实现了 `Comparable` 接口[^1]。 ### 实现 `Comparable` 接口进行排序 如果需要对自定义对象进行排序,可以在类中实现 `Comparable` 接口,并重写 `compareTo()` 方法。例如,对于一个 `User` 类: ```java public class User implements Comparable<User> { private String name; public int compareTo(User user) { return this.getName().compareTo(user.getName()); // 按名称升序排列 } } ``` 然后可以使用 `Collections.sort(users)` 对 `User` 列表进行排序。此方法的缺点是只能定义一种排序规则,并且修改需要在类内部进行[^1]。 ### 使用 `Comparator` 接口进行排序 为了实现更灵活的排序规则,可以创建一个实现了 `Comparator` 接口的类或匿名内部类来定义排序逻辑: ```java public class UserComparator implements Comparator<User> { @Override public int compare(User o1, User o2) { if (o1.getAge() > o2.getAge()) return 1; else if (o1.getAge() == o2.getAge()) { if (o1.getId() > o2.getId()) return 1; else if (o1.getId() == o2.getId()) return 0; else return -1; } else return -1; } } UserComparator comp = new UserComparator(); Collections.sort(users, comp); ``` 此方法允许在不修改原有类的情况下定义多种排序规则[^1]。 ### 使用 Java 8 的 Lambda 表达式 Java 8 引入了 Lambda 表达式,使得排序代码更加简洁: ```java List<User> users = ...; users.sort((u1, u2) -> u1.getName().compareTo(u2.getName())); ``` 或者使用方法引用: ```java users.sort(Comparator.comparing(User::getName)); ``` 还可以进行逆序排序: ```java users.sort(Comparator.comparing(User::getName).reversed()); ``` ### 使用 Stream API 排序 Java 8 还引入了 Stream API,可以使用 `sorted()` 方法来排序: ```java List<Person> sortedList = list.stream() .sorted(Comparator.comparing(Person::getAge).reversed()) .collect(Collectors.toList()); ``` 这种方法非常适合链式调用和进一步的数据处理[^3]。 ### 使用 Comparator 的方法引用 对于多属性排序,可以利用 `Comparator` 的组合方法: ```java users.sort(Comparator.comparing(User::getAge).thenComparing(User::getName)); ``` 这种方法可以按年龄排序,如果年龄相同,则按名字排序[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值