Java中Array类的sort方法实现数组排序
Java中的Array类提供了各种对数组进行操作的方法,其中sort()方法是对数组进行排序的方法之一。sort()方法可以对数组中的元素进行排序,并且可以指定排序的顺序(升序或降序)。在Java中,sort()方法使用的是快速排序算法,这种算法具有较高的效率,适用于大多数情况。
Array类的sort()方法有两个重载方法,一个是对基础类型的数组排序,另一个是对对象数组排序。在这里,我们只讨论对基础类型的数组排序。
基础类型的数组排序
在Java中,基础类型的数组包括int、short、byte、long、float和double类型的数组。Array类的sort()方法对这些数组的排序非常方便。使用sort()方法对基础类型的数组进行排序的步骤如下:
1.创建需要排序的数组
int[] array = { 5, 9, 3, 7, 6 };
2.调用sort()方法进行排序
Arrays.sort(array);
3.排序后的数组结果
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
//输出:3 5 6 7 9
这里,我们创建了一个int类型的数组,并将其中的5, 9, 3, 7, 6赋值给数组。然后,我们调用sort()方法对数组进行排序。最后,使用for循环遍历数组打印结果,输出结果为:3 5 6 7 9。
sort()方法默认将数组按升序排列,但如果需要降序排列,可以使用一个重载的sort()方法,该方法接受一个比较器Comparator类型的参数。比较器是一种工具,它指定了如何比较对象。我们可以通过创建一个比较器,来定义如何将数组按照需要的方式排序。例如:
int[] array = { 5, 9, 3, 7, 6 };
Arrays.sort(array, (a, b) -> b - a);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
//输出:9 7 6 5 3
在上面的代码中,我们使用排序器Comparator来定义一个按降序排列的排序器,将其作为第二个参数传递给sort()方法。最后,输出结果为:9 7 6 5 3。
对象数组排序
除了基础数据类型的数组,Java中还有对象数组。这些数组是由对象组成的数组。如果要对这些数组进行排序,我们需要指定如何将对象进行比较。在Java中,我们可以使用Comparable接口或者Comparator接口实现对象的比较。
Comparable接口
Comparable接口是Java定义的一个用于比较对象的接口,在这个接口中定义了一个compareTo()方法,该方法接受一个对象作为参数,并返回一个整型值,用于比较该对象与指定对象的大小。如果当前对象小于指定对象,则返回负数;如果当前对象大于指定对象,则返回正数;如果两个对象相等,则返回0。
示例:
class Person implements Comparable<Person>{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person anotherPerson) {
return this.age - anotherPerson.getAge();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
在这里,我们创建了一个Person类,该类实现了Comparable接口,并重写了compareTo()方法。在compareTo()方法中,我们比较了当前对象和指定对象的年龄属性,如果当前对象的年龄属性小于指定对象,则返回负值,否则返回正值。这个方法用于对象之间的比较。
接下来,我们使用Arrays.sort()方法对一个Person类型的数组进行排序:
Person[] persons = new Person[4];
persons[0] = new Person("John", 30);
persons[1] = new Person("Mike", 22);
persons[2] = new Person("Joe", 40);
persons[3] = new Person("Marry", 18);
Arrays.sort(persons);
for (Person person : persons) {
System.out.println(person);
}
//输出:Person [name=Marry, age=18]
// Person [name=Mike, age=22]
// Person [name=John, age=30]
// Person [name=Joe, age=40]
在这里,我们创建了一个包含4个Person对象的person数组。然后,我们对这个数组调用sort()方法进行排序。对象数组的排序会根据compareTo()方法中的逻辑来实现对对象属性的比较,并根据结果进行排序。
Comparator接口
Comparator接口也是一个用于比较对象的接口。它通常是用于对无法直接调用compareTo()方法比较大小的对象进行比较的。
在这里,我们为Person类创建了一个比较器AgeComparator,该比较器根据Person对象的年龄属性进行比较并排序:
class AgeComparator implements Comparator<Person>{
@Override
public int compare(Person person1, Person person2) {
return person1.getAge() - person2.getAge();
}
}
然后,我们使用Arrays.sort()方法将Person类型的数组按照该比较器进行排序:
Person[] persons = new Person[4];
persons[0] = new Person("John", 30);
persons[1] = new Person("Mike", 22);
persons[2] = new Person("Joe", 40);
persons[3] = new Person("Marry", 18);
Arrays.sort(persons, new AgeComparator());
for (Person person : persons) {
System.out.println(person);
}
//输出:Person [name=Marry, age=18]
// Person [name=Mike, age=22]
// Person [name=John, age=30]
// Person [name=Joe, age=40]
在这里,我们创建了一个AgeComparator,并将其作为第二个参数传递给sort()方法,在排序时使用了这个比较器。排序结果与上面的例子相同,都是按照年龄属性升序排序的。
总结
本文介绍了Java中的Array类的sort()方法,该方法可以对基础类型的数组和对象数组进行排序。对于基础类型的数组,默认按升序排序;对于对象数组,则可以根据实现的Comparable接口或者传递一个比较器来指定排序方式。sort()方法是Java中一个很常用的排序方法,使用起来也是非常方便的。
