突唯阿 领先的响应式网站建设平台,网站建设服务器一般多少钱,晋城企业网站建设价格,2024年新冠会消失吗目录 一.对复杂的数据类型比大小
Comparable接口
compareTo方法
二.对复杂数据类型排序
三.总结 一.对复杂的数据类型比大小
假如我们现在有个学生类#xff0c;并且我们实例化出了俩个学生对象#xff0c;他们各自有各自的名字和年龄属性#xff0c;我们如何对他们进…
目录 一.对复杂的数据类型比大小
Comparable接口
compareTo方法
二.对复杂数据类型排序
三.总结 一.对复杂的数据类型比大小
假如我们现在有个学生类并且我们实例化出了俩个学生对象他们各自有各自的名字和年龄属性我们如何对他们进行比大小操作呢
class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}
}public class Test{public static void main(String[] args) {Student student1 new Student(张三,20);Student student2 new Student(李四,23); if (student1 student2) {System.out.println(student1 student2);}else {System.out.println(student1 student2);}}
}我们可以看见编译器的报错提示这是因为Java提供的运算符号只能识别操作简单的数据类型对于我们自定义的Student类是无法识别的 Comparable接口
在这种情况下我们就可以使用我们之前的讲解的接口的知识我们可以调用Comparable接口然后重写其中的compareTo方法在使用接口的时候需要注意声明你需要比较的类型也就是接口后尖括号内的内容
compareTo方法 我们在这里对接口中的compareTo方法进行重写后在main方法中进行调用
class Student implements Comparable Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}Overridepublic int compareTo(Student o) {return this.name.compareTo(o.name);}
}public class Test{public static void main(String[] args) {Student student1 new Student(张三,20);Student student2 new Student(李四,23);if (student1.compareTo(student2) 0) {System.out.println(student1 student2);}else {System.out.println(student1 student2);}}
}
我们也可以根据年龄进行比大小只需要重新重写这个方法就可以了 Overridepublic int compareTo(Student o) {return this.age-o.age;}
二.对复杂数据类型排序
假如我们现在有一个学生类数组我们使用Arrays.sort对他进行排序
public class Test{public static void main(String[] args) {Student[] students new Student[3];Student student1 new Student(张三,20);Student student2 new Student(李四,23);Student student3 new Student(王五,25);students[0] student1;students[1] student2;students[2] student3;Arrays.sort(students);}
}
我们会发现报错信息如下原因就是对于这种复杂的数据类型如果我们要让编译器来排序那我们就需要给他排序规则很显然这里编译器是没有读取到任何的排序规则的 我们点击错误信息打开源码观察会发现编译器这里还是用到了Comparable接口 那我们还是像刚才一样调用Comparable接口然后我们给出明确的排序规则再写一个排序方法就可以正常对复杂数据排序了
import java.util.Arrays;class Student implements Comparable Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}
// Override
// public int compareTo(Student o) {
// return this.name.compareTo(o.name);
// }Overridepublic int compareTo(Student o) {return this.age-o.age;}Overridepublic String toString() {return Student{ name name \ , age age };}public static void mySort(Comparable[] comparables) {for (int i 0; i comparables.length-1; i) {for (int j 0; j comparables.length-1-i; j) {//if(comparables[j] comparables[j1]) {if(comparables[j].compareTo(comparables[j1]) 0) {//交换Comparable tmp comparables[j];comparables[j] comparables[j1];comparables[j1] tmp;}}}}
}public class Test{public static void main(String[] args) {Student[] students new Student[3];Student student1 new Student(张三,20);Student student2 new Student(李四,23);Student student3 new Student(王五,25);students[0] student1;students[1] student2;students[2] student3;mySort(students);System.out.println(Arrays.toString(students));}
}三.总结
当我们需要对复杂的数据类型进行排序或者比大小的时候我们就可以使用Comparable接口然后重写其中的compareTo方法然后就可以直接使用compareTo方法进行排序了又或者是通过其他方法来调用compareTo方法来对复杂类型的数组进行排序