开发者学堂课程【Java 高级编程:比较器问题引出】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/360
比较器问题引出
内容介绍:
一、比较器问题的引出
二、实现对象数组的排序
三、String 对象数组排序
四、采用自定义类型进行排序
所谓的比较器指的就是进行大小关系的确定判断,下面首先来分析一下比较器存在的意义。
比较器问题的引出
如果要进行数组操作,肯定使用 java.util.Arrays. 的操作类完成,这个类里面提供有绝大部分的数组操作支持,同时在这个类里面还提供有一种对象数组的排序支持: public static void sort(Object[] a);
范例: 实现对象数组的排序
package cn.mldn.demo;
import java.util.Arrays;
public class JavaAPIDemo {
public static void main(String[ ] args) throws Exception {
Integer data[ ] = new Integer[ ] { 10,9,5,2,20 }; // 对象数组
Arrays.sort(data); //进行对象数组的排序
system. out. println(Arrays.toString(data) );
}
}
同样,如果说现在给定的是一个 String 型的对象数组,那么也是可以进行排序处理的。
范例: String 对象数组排序
package cn.mldn.demo;
import java.util.Arrays;
public class JavaAPIDemo {
public static void main(String[ ] args) throws Exception {
String data [ ] = new String[ ] {“X”, “B”, “A”, “E”, “G” };
Arrays.sort(data); //进行对象数组的排序
system. out. println(Arrays.toString(data) );
}
}
运行结果:
java.lang.Integer 与 java.lang.String 两个类都是由系统提供的程序类。
范例: 采用自定义类型进行排序
package cn.mldn.demo;
import java.util.Arrays;
public class JavaAPIDemo {
public static void main(String[ ] args) throws Exception {
Person data [ ]= new Person [ ] {
New Person(“小强-A”,80 ),
New Person(“小强-B”,50 ),
New Person(“小强-C”,100 ) } ;
Arrays.sort(data); //进行对象数组的排序
system. out. println(Arrays.toString(data) );
}
}
class Person {
private String name ;
private int age ;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 无参构造、setter、getter略
@Override
public String toString( ) {
return " 【Person类对象】姓名:" + this.name + "、年龄:" + this.age + " \”;
}
}
运行结果:
运行时异常: Exception in thread "main" java.lang.ClassCastException: cn.mldn.demo.Person cannot be cast to java.base/java. lang.comparable.
总结:任意的一个类默认情况下是无法使用系统内部的类实现数组排序或比较需求的,是因为没有明确的指定出到底该如何比较的定义(没有比较规则),那么这个时候在 Java 里面为了统一比较规则的定义,所以提供有比较器的接口:Comparable