Java数组排序 Arrays.sort
前言
在Java中,数组排序是经常会运用的,我们常使用的Arrays.sort对数组进行排序,但是一般默认为int或者其他基本数据类型,那么如何使用Arrays.sort实现对二维数组的排序和怎么实现对类的排序?
一、Arrays.sort
查看Arrays的源码可以看到这个工具类里面关于有很多种方法,如下图所示: 除了对一些基本数据类型的排序我们可以看到最下面的两种方法:使用sort排序调用的是当前类的comparator方法;因此重写这个方法即可实现对类的排序和对二维数组的排序; (https://img-blog.img.cn/20210514163211152.png)
1.Arrays.sort()对类的排序
代码如下(示例):
import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator;
新建一个类person,里面有三个私有成员变量;
Person[] people = new Person[4];
people[0] = new Person(1, 15, "zhengyimin");
people[1] = new Person(1, 15, "wangxindong");
people[2] = new Person(1, 15, "sunliang");
people[3] = new Person(1, 15, "chenchi");
// 重写了people类中的Comparator方法;
//可以自定义各种排序顺序
Arrays.sort(people, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
int id_gap = o1.getId() - o2.getId();
if (id_gap != 0)
return id_gap;
int age_gap = o1.getAge() - o2.getAge();
if (age_gap != 0)
return id_gap;
return o1.getName().compareTo(o2.getName());
}
}
);
for (Person p : people) {
System.out.println(p);
}
结果部分:
2.Arrays.sort()对二维数组的排序
代码如下(示例):
int[][] envelopes = new int[][]{
{
5,4},{
6,4},{
6,7},{
2,3}};
Arrays.sort(envelopes, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0])
return o2[1] - o1[1];
return o1[0] - o2[0];
}
});
可以将二维数组看成两个数组第一层是envelopes,第二层是envelopes[]; 那么重写的就是一个一维数组的排序;
总结
对二维数组的排序是我在刷动态规划是遇到的叠信封问题,里面涉及到对二维数组的排序。 我们可以根据类似的方法,实现多维数组的排序。
