1.     public MetaCell[][] getByColumn(final int columnIndex, int decisionIndex) {//【注意】final咯
  2.         MetaCell[][] array = new MetaCell[m][2];//Entry<MetaCell, MetaCell>参考http://blog.csdn.net/sunmenggmail/article/details/8952712 和 http://www.cnblogs.com/fstang/archive/2013/04/20/3032097.html
  3.         for(int i=0; i<m; i++){
  4.             array[i][0]=A[i][columnIndex];
  5.             array[i][1]=A[i][decisionIndex];
  6.         }
  7.         Arrays.sort(array, new Comparator<MetaCell[]>(){//二维数组按照某列进行排序,你也可以采用Map
  8.             public int compare(MetaCell[] o1, MetaCell[] o2) {//任何多维数组可看成一个一维数组,一维数组中每个元素是一个一维数组
  9.                 return o1[columnIndex].compareTo(o2[columnIndex]);//比较:大于0则表示升序
  10.             }
  11.         } );
  12.         return array;
  13.     }

以上默认升序。可修改Comparator接口即可。

以下是按多列排序【以第1列为准,第2列次之——当第一列出现相同值,用第2列排序】

import java.util.Arrays;

  1. import java.util.Comparator;    
  2.       
  3.   public class ArraySort {    
  4.       
  5.       public static void sort(int[][] ob, final int[] order) {    
  6.           Arrays.sort(ob, new Comparator<Object>() {    
  7.               public int compare(Object o1, Object o2) {    
  8.                   int[] one = (int[]) o1;    
  9.                   int[] two = (int[]) o2;    
  10.                   for (int i = 0; i < order.length; i++) {    
  11.                       int k = order[i];    
  12.                       if (one[k] > two[k]) {    
  13.                           return 1;    
  14.                       } else if (one[k] < two[k]) {    
  15.                           return -1;    
  16.                       } else {    
  17.                           continue;  //如果按一条件比较结果相等,就使用第二个条件进行比较。  
  18.                       }    
  19.                   }    
  20.                   return 0;    
  21.               }    
  22.           });   
  23.       }    
  24.       
  25.       public static void main(String[] args) {    
  26.           int array[][] = new int[][] {     
  27.                   { 12, 34, 68, 32, 9, 12, 545 },     
  28.                   { 34, 72, 82, 57, 56, 0, 213 },     
  29.                   { 12, 34, 68, 32, 21, 945, 23 },     
  30.                   { 91, 10, 3, 2354, 73, 34, 18 },    
  31.                   { 12, 83, 189, 26, 27, 98, 33 },     
  32.                   { 47, 23, 889, 24, 899, 23, 657 },     
  33.                   { 12, 34, 68, 343, 878, 235, 768 },     
  34.                   { 12, 34, 98, 56, 78, 12, 546 },     
  35.                   { 26, 78, 2365, 78, 34, 256, 873 } };    
  36.           sort(array, new int[] {0,1});   //先根据第一列比较,若相同则再比较第二列
  37.           for (int i = 0; i < array.length; i++) {    
  38.               for (int j = 0; j < array[i].length; j++) {    
  39.                   System.out.print(array[i][j]);    
  40.                   System.out.print("\t");    
  41.               }    
  42.               System.out.println();    
  43.           }    
  44.       }    
  45.   }  

Java 多维数组 按某列 排序的更多相关文章

  1. 三重for循环实现对二维数组的按列排序(JavaScript)

    由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...

  2. PHP 距离我最近排序+二维数组按指定列排序

    思路: 1.获取我的位置,即:我的经纬度 2.各站点须有位置     即:排序对象有位置经纬度 3.查询要排序的站点列表 4.循环遍历计算  与我的距离 5.二维数组按 指定列(距离)排序 具体如下: ...

  3. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

  4. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)

    Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)

  5. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  6. JAVA二维数组的复制

    JAVA二维数组的复制 笔者今天做一道ccf题目时,遇到要将二维数组拷贝复制时,没有用常规的那种一个一个数的复制,用的是System.arraycopy()来进行复制,下面介绍这个函数的一些注意点: ...

  7. 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用

    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...

  8. PHP 按二维数组的键值排序

    /** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...

  9. java 多维数组遍历

    java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ...

随机推荐

  1. 面试相关的技术问题---java基础

    最近在准备秋季校招,将一些常见的技术问题做一个总结!希望对大家有所帮助! 1.面向对象和面向过程的区别是什么? 面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描 ...

  2. 图解JVM在内存中申请对象及垃圾回收流程

    http://longdick.iteye.com/blog/468368 先看一下JVM的内存模型: 从大的方面来讲,JVM的内存模型分为两大块: 永久区内存( Permanent space )和 ...

  3. java中数据类型及运算符的注意事项

    数据类型: boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言). char:Java中用" \u四位十六进制的数 ...

  4. C#学习笔记(4)

    今天先把上几个系列的做一个总结,在这里给出一个面向对象版的简易计算器(重在理解面向对象的思想). 1.首先定义一个计算器类(类库)(Calculator) public abstract class ...

  5. 在ARM Linux 使用 Valgrind

    Linux valgrind 移植到ARM-Linux  一.Cross-Compile/交叉编译 (1)下载及解压Valgrind-3.11 (2)修改confirure 将armv7*)修改为ar ...

  6. JS脚本延时

    JS脚本延时   function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7 ...

  7. linux相关解压命令

    ZIP 我们可以使用下列的命令压缩一个目录: # zip -r archive_name.zip directory_to_compress 下面是如果解压一个zip文档: # unzip archi ...

  8. Google Map 自定义 infowindow

    最近做的东西用到了infowindow,不过google提供的样式太难看了,于是想改变一下样式.看了一下好像infowindow的样式不太好改. 查了半天资料,看到一个infobox,感觉真的挺好用. ...

  9. php练习4——排序,查找

    排序(从小到大) 查找 注:二分法查找的数组默认为已经排序的数组

  10. yum使用详细

    1.使用YUM查找软件包 命令:yum search~ 2.列出所有可安装的软件包 命令:yum list 3.列出所有可更新的软件包 命令:yum list updates 4.列出所有已安装的软件 ...