public MetaCell[][] getByColumn(final int columnIndex, int decisionIndex) {//【注意】final咯
        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
        for(int i=0; i<m; i++){
            array[i][0]=A[i][columnIndex];
            array[i][1]=A[i][decisionIndex];
        }
        Arrays.sort(array, new Comparator<MetaCell[]>(){//二维数组按照某列进行排序,你也可以采用Map
            public int compare(MetaCell[] o1, MetaCell[] o2) {//任何多维数组可看成一个一维数组,一维数组中每个元素是一个一维数组
                return o1[columnIndex].compareTo(o2[columnIndex]);//比较:大于0则表示升序
            }
        } );
        return array;
    }

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

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

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();    
          }    
      }    
  }  

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. MVC小系列(十)【PartialView中的页面重定向】

    在mvc的每个Action中,都可以指定一种返回页面的类型,可以是ActionResult,这表示返回的页面为View或者是一个PartialView, 在以Aspx为页面引擎时,PartialVie ...

  2. Java 泛型类型的一些限制

    由于泛型类型在运行时被消除,因此,对于如何使用泛型类型是有一些限制的. 限制1:不能使用new E() 不能使用泛型类型参数创建实例.例如,下面的语句是错误的: E object = new E(); ...

  3. iOS越狱系列(一):使用Reveal分析APP

    TOOLS 1.已越狱的设备,并且已安装了OpenSSH,MobileSubstrate等实用工具 Cydia源/Telesphoreo里有 里面有个包 可以基本集合所有开发工具提供库 2.mac o ...

  4. OC 消息传递机制

    消息传递(message passing)的概念是Smalltalk语言的核心原则之一,有时Smalltalk和Objective-C被称为面向消息的语言,通常“消息”一词的含义和“方法”是相同的. ...

  5. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...

  6. 日期字符串转换为NSDate

    // 纯数字日期 NSString *str1 = "; // 日期字符串 NSString *str2 = @"2015/05/12 10:22:01"; // 带时区 ...

  7. ubuntu ssh安装

    参考 http://www.linuxidc.com/Linux/2010-02/24349.htm  文章很不错!! ssh   登录名@ip地址 , 如果提示验证key can't be esta ...

  8. node论坛练手

    当时学node,自己写了个论坛练手,现在看还是有很多问题,有时间好好改改 https://github.com/hitbs228/countdown

  9. Redis — CentOS6.4安装Redis以及安装PHP客户端phpredis

    一.安装Redis 1.下载安装包 wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.解压包 tar xzf redis-2.8. ...

  10. ADO.NET学习小结【1】正在更新...

    小弟正在学习ADO.net有误的地方还请大大们批评指出,小弟在此谢过了 一.ADO.net简述: 以前我们写程序尤其是写和数据库有关的应用程序时,你我都得要了解Microsoft ADO COM对象才 ...