在Arrays类中有很多方法,Arrays.sort方法可实现对象的排序操作,例如:
int []arr={1,5,9,3,2,6,4};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
String[] brr={"java","python","易语言","R语言"};
Arrays.sort(brr);
System.out.println(Arrays.toString(brr));
运行结果:
[1, 2, 3, 4, 5, 6, 9]
[R语言, java, python, 易语言]
(注:该类的sort方法实现对整型数组的排序默认是由低到高顺序进行排序
而对字符串数组进行排序是根据编译器默认的编码进行排序)
那么,怎么样才能实现对自定义类的对象进行排序呢?
首先,先查看Arrays类中的sort源码,其中有个名称是Comarable的接口(<T>中的T表示比较对象的类型),在该类中有个抽象方法为compareTo(要实现自定义对象的比较,这个抽象方法是需要被重写的)
在这个sort方法中,有两个接口:
(1)Comparable接口: 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为 它的自然比较方法。
(2)Comparator接口: Comparable接口是要求自定义类去实现,按照OO原则:对修改关闭,对扩展开放。 那么如果这个类已经定义好了,不想再去修改它,那如何实现比较呢? Comparator接口:强行对某个对象collection进行整体排序的比较 。
我们以comparable接口为例:
import java.util.Arrays;
import java.util.Comparator;
public class Demo {
public static void main(String[] args) {
person p1=new person("张三",8);
person p2=new person("李四",19);
System.out.println(p1.compareTo(p2));
person[] arrr={p1,p2};
Arrays.sort(arrr);
System.out.println(Arrays.toString(arrr));
}
}
class person implements Comparable<person>
{
String name;
int age;
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 person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(person o) {
return this.age-o.age;
}
}
运行结果:
-11
[person{name='张三', age=8}, person{name='李四', age=19}]