1. 程式人生 > 實用技巧 >java中用Arrays.sort實現多維陣列的自定義排序

java中用Arrays.sort實現多維陣列的自定義排序

java中有這樣一個方法可以幫助我們實現陣列的自定義排序:Arrays類的public static <T> void sort(T[] a, Comparator<? super T> c)

我們只需要實現Comparator介面,也就是實現其中的compare方法,在該方法中按照自己希望的規則來編寫排序。

compare方法的完整宣告是這樣的:public int compare(int[] o1, int[] o2)

也就是說,引數只支援一維陣列。但需要注意的是,陣列o1、o2並不是我們傳入的陣列的哪部分,而是一個指代,o1、o2這個一維陣列中的元素指的是要比較的元素的下標

,o1的下標為0的元素對應傳入陣列的下標為0的元素,o1的下標為1的元素對應傳入陣列的下標為1的元素,以此類推。

返回o1的元素減o2的元素是升序,返回o2的元素減o1的元素是升序。

package com.ex.greedy;

import java.util.Arrays;
import java.util.Comparator;

public class test {
    public static void main(String[] args) {
        int[][] arr={{1,4,5},{2,5,3},{1,2,3},{5,4,3},{1,4,3}};
        
//讓陣列按照這樣的順序排序:優先按第一個元素排,如果第一個元素相等,就按照第二個元素排,如果第二個元素也相等的話,就按照第三個元素排。都要升序。 Arrays.sort(arr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if (o1[0]!=o2[0]){ return o1[0]-o2[0]; }else {
if (o1[1]!=o2[1]){ return o1[1]-o2[1]; }else { return o1[2]-o2[2]; } } } }); //輸出結果 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[0].length; j++) { System.out.print(arr[i][j]+" "); } System.out.println(); } } }
輸出結果:
1 2 3 
1 4 3 
1 4 5 
2 5 3 
5 4 3