二维数组排序

简介:

二维数组排序实例:

import java.util.*;
public class TwoDimArrayTest {
public static void main(String[] args) {
String[][] arr = {{"B","Z","K"},
{"C","X","L"},
{"A","Y","M"}} ;
//缺省(按0列升序)
Arrays.sort(arr, new TwoDimArrayComparator());
printArray(arr);
//按0列降序
Arrays.sort(arr, new TwoDimArrayComparator(0,-1));
printArray(arr);
//按1列升序
Arrays.sort(arr, new TwoDimArrayComparator(1));
printArray(arr);
//按1列降序
Arrays.sort(arr, new TwoDimArrayComparator(1,-1));
printArray(arr);
//按2列升序
Arrays.sort(arr, new TwoDimArrayComparator(2));
printArray(arr);
//按2列降序
Arrays.sort(arr, new TwoDimArrayComparator(2,-1));
printArray(arr);
}
public static void printArray(String[][] arr) {
for (int i= 0; i< arr.length ; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] +"\t");
}
System.out.println();
}
System.out.println("======================");
}
}
class TwoDimArrayComparator implements Comparator{
private int keyColumn = 0;
private int sortOrder = 1;
public TwoDimArrayComparator () {}
public TwoDimArrayComparator (int keyColumn) {
this.keyColumn = keyColumn;
}
public TwoDimArrayComparator (int keyColumn,int sortOrder) {
this.keyColumn = keyColumn;
this.sortOrder = sortOrder;
}
public int compare(Object a, Object b) {
if (a instanceof String[]) {
return sortOrder * ((String[])a)[keyColumn].compareTo(((String[])b)[keyColumn]);
} else if (a instanceof int[]){
return sortOrder * (((int[])a)[keyColumn] - ((int[])b)[keyColumn]);
} else {
return 0;
}
}
}

运行结果:

C:\java>java TwoDimArrayTest
A Y M
B Z K
C X L
======================
C X L
B Z K
A Y M
======================
C X L
A Y M
B Z K
======================
B Z K
A Y M
C X L
======================
B Z K
C X L
A Y M
======================
A Y M
C X L
B Z K
======================

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2007/07/04/805334.html如需转载请自行联系原作者


kenty

相关文章
|
5月前
二维前缀和
二维前缀和
15 0
|
5月前
|
存储
不会吧,不会吧,还在直接写二维数组?康康我一维变二维
不会吧,不会吧,还在直接写二维数组?康康我一维变二维
|
6月前
|
存储 人工智能 算法
二维差分与二维前缀和
二维差分与二维前缀和
60 3
C#基础⑥.2——数组(冒泡排序、求最值、数组排序、forr反转)
一次语文测试后,老师让班长统计每一个学生的成绩并计算全班(全班共5人)的平均成绩,然后把所有成绩显示出来。
|
6月前
|
C++ 容器
[C++] 对二维数组中的二维坐标点x,y进行排序
[C++] 对二维数组中的二维坐标点x,y进行排序
190 0
|
人工智能 算法
动态规划之区间一维
噩梦中的仙境:动态规划之区间一维
67 0
动态规划之区间一维
|
存储 NoSQL
第3章 数组与矩阵——3.5 稀疏矩阵
第3章 数组与矩阵——3.5 稀疏矩阵
|
人工智能 vr&ar
一维 二维求前缀和、差分
一维 二维求前缀和、差分
53 0
|
人工智能 Java 算法框架/工具
二维前缀和数组&二维差分数组
二维差分数组div中的每一个格子记录的是「以当前位置为区域的左上角(区域右下角恒定为原数组的右下角)的值的变化量」【应该不固定 可以倒转】
349 0
二维前缀和数组&二维差分数组
LeetCode(4-寻找两个正序数组的中位数&&5-最长回文子串&&6-Z形变换)
LeetCode(4-寻找两个正序数组的中位数&&5-最长回文子串&&6-Z形变换)
LeetCode(4-寻找两个正序数组的中位数&&5-最长回文子串&&6-Z形变换)