内部比较器
在内部比较器中,我们可以根据对名字、身高、年龄等进行排序。比如说两个名字进行排序,a和b,那么排序后就会是a在前b在后。
一张图了解背后的秘密:
在上面这张图当中,我们更多的是去关注该值是大于0还是小于0,或者说是等于0。根据不同的情况来说明该值的一个情况。
首先需要定义一个排序的方法,需要对相应的值进行排序,由于需要排序的值会是很多种类型,所以需要定义一个排序在很多情况下仍然可以使用的排序。
在上面的排序方法当中,我们可以在方法内部加上一个判断,如果说满足该条件就会执行里面的语句,如果说不满足那么将会执行怎样的语句或是不执行。根据这样的情况在使用一个排序方法就可以使用各种类型不同的排序。
第一步:排序方法
排序代码+注释:
//定义一个排序方法,需要用到的时候直接在其他主方法直接调用即可
public static void sort(Object[] arr){//定义一个排序方法
for (int i = 1; i <= arr.length-1; i++) {//对数组进行遍历,定义数组比较的两个元素
for (int j = i; j <= arr.length-1; j++) {
Student s1 = (Student)arr[i-1];
Student s2 = (Student)arr[j];
if (s1.getAge()>s2.getAge()) {//如果前面一个值大于后面一个值,那么将会执行下面的操作,否则不执行里面的语句
Object temp = arr[i-1];//在这里主要执行的是一个交换的工作,数组大的往后放,小的往前
arr[i-1] = arr[j];//将小的值给到i-1
arr[j] = temp;//最后完成交换
}
}
}
}
第二步:创建一个封装类,在类中将属性进行get、set操作,构造方法,toString打印方法。如下图所示:
第三步:创建一个主程序的类,在类中new对象,然后进行相应的排序。如下图所示:
代码+注释展示:
public static void main(String[] args) {
int a = 16;
int b = 17;
System.out.println(a-b);
String m = "在哪里";
String n = "在哪里";
System.out.println(m.compareTo(n));//两者之间进行比较,调用的这个方法返回的时一个int型的一个值
double d1 = 9.8;
double d2 = 8.9;
//System.out.println((int)(d1-d2));//因为两者数据不相等,所以这个不符合
System.out.println(((Double)d1).compareTo((Double)d2));//将的d1、d2转换成Double类,这是一个引用数据类型,这样的话可以使用compareTo方法
Student s = new Student("Tom",15,63);//定义对象并进行赋值
Student s1 = new Student("Je",14,59);
Student s2 = new Student("TomSun",16,56.7);
//System.out.println(s.compareTo(s1));//比较s对象与s1对象两者之间的年龄
System.out.println(s.compareTo(s1));//按照成绩进行比较
}
创建一个封装类,代码加注释展示:
public class Student implements Comparable{//实现compareTo接口
private String name;
private int age;
private double score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public Student(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}
@Override
public int compareTo(Object o) {//重写compareTo方法,可以发现返回的时int类型
Student other = (Student)o;//强转方法中的参数类型为Student类型
//按照年龄进行比较
//return this.getAge()-other.getAge();//比如说在Student类中按照年龄来比
//按照成绩进行比较
//return ((Double)this.getScore()).compareTo((Double)other.getScore());
//按照姓名进行比较
return this.getName().compareTo(other.getName());
}
}