4 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果要根據(jù)索引對(duì)數(shù)組進(jìn)行排序,可以Arrays::sort使用Comparator::comparingInt
int index = 0;
Arrays.sort(hitlist, Comparator.comparingInt(arr -> arr[index]));
這是Ideone中的一個(gè)示例
編輯
根據(jù)您的評(píng)論和評(píng)論,您希望[0, 0]在排序后忽略數(shù)組中的 ,在這種情況下,您可以使用:
int[][] hitlist = {{0, 0}, {4, 0}, {3, 1}, {4, 2}, {4, 4}, {5, 6}, {4, 7}, {4, 8}, {1, 9}, {4, 11}, {4, 12}, {2, 13}, {4, 14}, {4, 15}, {0, 0}, {0, 0}, {0, 0}};
int index = 0;
int[][] sortedArray = Arrays.stream(hitlist)
.filter(arr -> arr[0] != 0 && arr[1] != 0)
.sorted(Comparator.comparingInt(arr -> arr[index]))
.toArray(int[][]::new);
Ideone 演示
輸出
[1, 9]
[2, 13]
[3, 1]
[4, 2]
[4, 4]
[4, 7]
[4, 8]
[4, 11]
[4, 12]
[4, 14]
[4, 15]
[5, 6]

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
雖然我更喜歡YCF_L 的解決方案,但這個(gè)實(shí)現(xiàn)使用了帶有整數(shù)數(shù)組比較器的快速排序。這提供了更大的靈活性。
import java.util.Arrays;
/**
* Based on Quicksort (right-most pivot) implementation from:
* https://www.programcreek.com/2012/11/quicksort-array-in-java/
*/
public class Sorter {
private static interface IntArrayComparator {
int compare(int[] a, int[] b);
}
public static void main(String[] args) {
int hitlist[][] = new int[8][2];
hitlist[4] = new int[] { 4, 10000 };
hitlist[1] = new int[] { 1, 10 };
hitlist[5] = new int[] { 5, 100000 };
hitlist[0] = new int[] { 0, 1 };
hitlist[2] = new int[] { 2, 100 };
hitlist[7] = new int[] { 7, 10000000 };
hitlist[3] = new int[] { 3, 1000 };
hitlist[6] = new int[] { 6, 1000000 };
quickSort(hitlist, (a, b) -> a[0] - b[0]);
Arrays.asList(hitlist).stream().map(Arrays::toString).forEach(System.out::println);
}
public static void quickSort(int[][] arr, IntArrayComparator comparator) {
quickSort(arr, comparator, 0, arr.length - 1);
}
public static void quickSort(int[][] arr, IntArrayComparator comparator, int start, int end) {
int partition = partition(arr, comparator, start, end);
if (partition - 1 > start) {
quickSort(arr, comparator, start, partition - 1);
}
if (partition + 1 < end) {
quickSort(arr, comparator, partition + 1, end);
}
}
public static int partition(int[][] arr, IntArrayComparator comparator, int start, int end) {
int[] pivot = arr[end];
for (int i = start; i < end; i++) {
if (comparator.compare(arr[i], pivot) < 0) {
int[] temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
}
}
int[] temp = arr[start];
arr[start] = pivot;
arr[end] = temp;
return start;
}
}
結(jié)果
[0, 1]
[1, 10]
[2, 100]
[3, 1000]
[4, 10000]
[5, 100000]
[6, 1000000]
[7, 10000000]

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
這取決于您是要對(duì)行還是列進(jìn)行排序。
假設(shè)您想對(duì)每一行進(jìn)行排序,您可以這樣做。
for(int i=0; i < hitlist.size(); i++ {
Array.sort(hitlist[i]);
}
對(duì)列進(jìn)行排序變得棘手,在這種情況下,您可以構(gòu)造一個(gè)包含列值的新數(shù)組并將列排序或旋轉(zhuǎn)為行(90 度),將其排序?yàn)樾胁⒃俅涡D(zhuǎn)回來(-90 度)
如果您需要其他任何東西,您必須自己實(shí)現(xiàn)搜索。
希望這可以幫助

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以將 int 數(shù)組裝箱成 Integer 數(shù)組,然后在 lambda 函數(shù)中以數(shù)字方式比較兩個(gè) Integer 對(duì)象(第 0 個(gè)索引處的對(duì)象)。
然后簡單地將比較器傳遞給 Arrays.sort ,它將根據(jù)比較器引起的順序?qū)ζ溥M(jìn)行排序。
Integer[][] array= {
{1, 3},
{10, 5},
{4, 100},
{12, 30} };
Comparator<Integer[]> arrayComparator = (a1, a2) -> a1[0].compareTo(a2[0]);
Arrays.sort(array, arrayComparator);
添加回答
舉報(bào)