我有一个二维数组可以使用 Java 作为一个整体进行排序。
我查看了各种链接 如何使用比较器对二维 ArrayList 进行排序。
但它总是按特定元素排序。我希望能够对整个二维数组进行排序。例如,
int[][] r = {{1,7,5},{1,3,5},{1,3,6}, {2,3,1}};
关于排序应该给我
{1,2,3},{1,3,5},{1,3,6},{1,5,7}.
谢谢!
我有一个二维数组可以使用 Java 作为一个整体进行排序。
我查看了各种链接 如何使用比较器对二维 ArrayList 进行排序。
但它总是按特定元素排序。我希望能够对整个二维数组进行排序。例如,
int[][] r = {{1,7,5},{1,3,5},{1,3,6}, {2,3,1}};
关于排序应该给我
{1,2,3},{1,3,5},{1,3,6},{1,5,7}.
谢谢!
您需要的是一个自定义比较器,它允许根据您的标准比较两个整数列表。
在使用此比较器进行排序之前,您必须先对列表本身进行排序。
这就是我在 Java 中的做法:
private static void sortArray(int[][] array) {
// Perform initial sorting
for (int[] subArray : array) {
Arrays.sort(subArray);
}
// Sort each array by its contents (similar to string sorting)
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int length = Math.min(o1.length, o2.length);
for (int i = 0; i < length; i++) {
if (o1[i] > o2[i]) return 1;
if (o1[i] < o2[i]) return -1;
}
// Longer arrays come after shorter arrays, but only if the rest is equal
if (o1.length > o2.length) return 1;
if (o1.length < o2.length) return -1;
return 0;
}
});
}
第一步是对二维数组里面的所有数组进行排序,然后根据二维数组里面每个数组的内容对整个数组进行排序。比较器的工作方式类似于您对区分大小写的字符串比较器的期望。
这将满足您的需求:
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
Arrays.sort(o1);
Arrays.sort(o2);
for (int i = 0; i < o1.length && i < o2.length; i++) {
if (o1[i] != o2[i]) {
return o1[i] < o2[i] ? -1 : 1;
}
}
if (o1.length != o2.length) {
return o1.length < o2.length ? -1 : 1;
}
return 0;
}
});