java Collections.sort

博客介绍了Java中列表排序的相关内容,包括基本类型列表和自定义类型列表的排序。还说明了排序时正序和逆序的计算方式,以及排序方法返回值(负整数、零、正整数)所代表的当前对象与比较对象值的大小关系和位置变化原理。

一.给基本类型列表排序

Collections.sort(intList,new Comparator<Integer>() { 
      @Override
      public int compare(Integer o1, Integer o2) {
        // 返回值为int类型,大于0表示正序,小于0表示逆序
        return o2-o1;
      }
 }); 

二.给自定义类型列表排序

Collections.sort(lista,new Comparator<Object>() //lista为自定义列表,其余的都是固定写法
{ 
      @Override
      public int compare(Object o1, Object o2)
      {
        /*按员工编号正序排序*/
        return o1.getEmpno()-o2.getEmpno();
        /*按员工编号逆序排序*/
        //return o2.getEmpno()-o1.getEmpno();
        /*按员工姓名正序排序*/
        //return o1.getEname().compareTo(o2.getEname());
        /*按员工姓名逆序排序*/
        //return o2.getEname().compareTo(o1.getEname());
      }
 });

o1-o2是正序(1,2,3,,),o2-o1是逆序(,,3,2,1)
原理:
这个方法返回三种 int 类型的值: 负整数,零 ,正整数;
负整数 : 当前对象的值 < 比较对象的值 , 位置排在前;
零 : 当前对象的值 = 比较对象的值 , 位置不变;
正整数 : 当前对象的值 > 比较对象的值 , 位置排在后

### Java `Collections.sort` 方法使用示例 #### 自然排序 当列表中的元素实现了 `Comparable` 接口时,可以直接调用 `Collections.sort()` 对其进行排序。例如字符串类型的列表,默认会按照字母顺序排列[^5]。 ```java import java.util.Arrays; import java.util.Collections; import java.util.List; public class NaturalOrderSort { public static void main(String[] args) { List<String> words = Arrays.asList("banana", "apple", "orange"); System.out.println("Before sorting: " + words); Collections.sort(words); System.out.println("After sorting: " + words); } } ``` 对于基本数据类型封装类(如 `Integer`, `Double`),同样适用此方式,因为它们都已实现 `Comparable` 接口[^4]。 #### 定制排序 如果希望自定义排序逻辑,则需创建并传入一个 `Comparator` 实现给 `Collections.sort()` 函数。这允许更灵活地控制排序行为,比如忽略大小写或基于特定属性排序对象实例[^1]。 ```java import java.util.*; class Employee implements Comparable<Employee> { private String name; private int age; public Employee(String n, int a){ this.name=n;this.age=a; } @Override public int compareTo(Employee other) { return Integer.compare(this.age,other.age); // 升序年龄对比 } @Override public String toString(){ return name+"("+age+")"; } } public class CustomComparatorExample { public static void main(String[] args) { List<Employee> empList=new ArrayList<>(); empList.add(new Employee("John",29)); empList.add(new Employee("Jane",37)); // 使用匿名内部类作为比较器 Collections.sort(empList, new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getName().compareTo(o2.getName()); // 按姓名字典序排序 } }); System.out.println("Sorted by Name:"); for (Employee e : empList) { System.out.println(e.toString()); } // 或者使用lambda表达式简化语法 Collections.sort(empList,(e1,e2)->Integer.valueOf(e1.getAge()).compareTo(Integer.valueOf(e2.getAge()))); System.out.println("\nSorted by Age:"); for (Employee e : empList) { System.out.println(e.toString()); } } // 假设这里还有getName和getAge的方法... } ``` 上述代码展示了两种不同的排序策略:一种是通过员工的名字来排序;另一种则是依据他们的年龄来进行排序。注意,在第二个例子中还提供了利用Lambda表达式的简洁版本[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值