[JAVA]有关比较器(Comparator接口)的用法及对象数组排序问题

跟上篇文章一样,今天讨论的对象也是Arrays.sort()方法与Comparator接口的相互用法。

当你想对一个普通的对象数组排序,怎么办?

这时候你应该想到的是,使用Comparator接口和Arrays.sort()结合使用。

Comparator也叫作比较器,用法在代码中体现。

首先,写一个比较器类。

import java.util.Comparator;  

public class StudentComparator implements Comparator<Student>{  
    public int compare(Student o1, Student o2) {  
        //当然可以用其他成员变量来作为衡量比较的标准 
        return o1.getNumber().compareTo(o2.getNumber());  
    }  
}  

现在,我创建了一个普通的学生类Student。存入数据:

import java.util.Arrays;  
public class Test {  
    public static void main(String[] args) {      
        Student sc = new Student("10000", "lz", 18);  
        Student sc1 = new Student("10001", "wx", 18);  
        Student sc2 = new Student("10003", "zh", 18);  
        Student sc3 = new Student("10002", "gd", 18);  
        Student scs[] = new Student[]{sc,sc1,sc2,sc3};  
        Arrays.sort(scs, new StudentComparator());//这里传出了一个比较器  
        for (int i = 0; i < scs.length; i++) {  
            System.out.println(scs[i].getNumber()+","+scs[i].getName()+","+scs[i].getAge());  
        }  
    }  
}  

看到Arrays.sort()里除了传递一个数组进去外,还有一个比较器。
这样就可以实现,对任何对象数组进行排序操作了。

但是值得注意的一点是,如果你Arrays.sort()方法中没传一个比较器的话,会抛出java.lang.ClassCastException异常。这点值得注意。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,对象数组可以使用`Arrays.sort()`方法进行排序。`Arrays.sort()`方法有多种重载形式,可以根据不同的比较器进行排序,例如: ```java public static <T> void sort(T[] a, Comparator<? super T> c) ``` 其中,`a`参数是待排序对象数组,`c`参数是比较器,用于指定排序的规则。 比较器是一个接口,通常使用Java 8中的lambda表达式来实现。比较器应该返回一个整数值,表示两个对象的大小关系。如果返回值小于0,则表示第一个对象小于第二个对象;如果返回值等于0,则表示两个对象相等;如果返回值大于0,则表示第一个对象大于第二个对象。 下面是一个示例,演示如何使用`Arrays.sort()`方法对对象数组进行排序: ```java class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } } public class ObjectArraySortDemo { public static void main(String[] args) { Person[] persons = { new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 20) }; // 按年龄升序排序 Arrays.sort(persons, Comparator.comparingInt(person -> person.age)); // 输出排序后的结果 System.out.println(Arrays.toString(persons)); } } ``` 输出结果为: ``` [Person{name='Charlie', age=20}, Person{name='Alice', age=25}, Person{name='Bob', age=30}] ``` 在上面的示例中,我们创建了一个`Person`类,并创建了一个包含三个`Person`对象的数组。然后我们使用`Arrays.sort()`方法对数组进行排序排序的依据是`Person`对象的`age`属性,使用了`Comparator.comparingInt()`方法来指定按照`age`属性进行排序。最后,我们输出排序后的结果。 除了上面的示例中使用的`Comparator.comparingInt()`方法,还有其他的比较器可以使用,例如: - `Comparator.comparing()`:使用对象的某个属性进行排序; - `Comparator.reverseOrder()`:逆序排列; - `Comparator.naturalOrder()`:自然排序,用于实现`Comparable`接口的类; - 自定义比较器,实现`Comparator`接口的`compare()`方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值