如何對二維陣列進行排序
阿新 • • 發佈:2019-01-06
最近做題時發現有些任務需要將二維陣列按照某一列進行排序
但JDK裡並沒有直接提供這一排序的方法
考慮自己重新寫實在太麻煩(還不一定正確/高效)
百度了一番:
import java.util.Arrays; import java.util.Comparator; /** * 二維陣列排序示例 * @author YY2924 2014/11/28 * @version 1.0 */ public class MatrixSort { public static void main(String[] args) { //二維陣列 Integer[][] matrix = new Integer[][] { {8,7},{9,5},{6,4} }; //排序 Arrays.sort(matrix,new Comparator<Integer[]>() { @Override public int compare(Integer[] x, Integer[] y) { if(x[0] < y[0]){ return 1; } else if(x[0] > y[0]){ return -1; } else { return 0; } } }); //列印 for(Integer[] integers : matrix){ System.out.println(Arrays.toString(integers)); } } }
類似的還有:
import java.util.Arrays; import java.util.Comparator; public class ArraySort { public static void sort(int[][] ob, final int[] order) { Arrays.sort(ob, new Comparator<Object>() { public int compare(Object o1, Object o2) { int[] one = (int[]) o1; int[] two = (int[]) o2; for (int i = 0; i < order.length; i++) { int k = order[i]; if (one[k] > two[k]) { return 1; } else if (one[k] < two[k]) { return -1; } else { continue; //如果按一條件比較結果相等,就使用第二個條件進行比較。 } } return 0; } }); } public static void main(String[] args) { int array[][] = new int[][] { { 12, 34, 68, 32, 9, 12, 545 }, { 34, 72, 82, 57, 56, 0, 213 }, { 12, 34, 68, 32, 21, 945, 23 }, { 91, 10, 3, 2354, 73, 34, 18 }, { 12, 83, 189, 26, 27, 98, 33 }, { 47, 23, 889, 24, 899, 23, 657 }, { 12, 34, 68, 343, 878, 235, 768 }, { 12, 34, 98, 56, 78, 12, 546 }, { 26, 78, 2365, 78, 34, 256, 873 } }; sort(array, new int[] {0,1}); //先根據第一列比較,若相同則再比較第二列 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]); System.out.print("\t"); } System.out.println(); } } }
閱讀程式碼中的問題:
關於Array,sort(arr,new Comparator<T>(){} ) :
————淺顯易懂的比較(假如A相同,則比較B):class MyComparator implements Comparator<UserInfo>{ @Override public int compare(UserInfo o1,UserInfo o2) { if(o1.getAge()-o2.getAge()==0){ return o1.getUserid()-o2.getUserid(); }else{ return o1.getAge()-o2.getAge(); } } }