[解决方案]java多维数组按照某几列进行排序

本文介绍了一种在Java中对二维数组按照指定列进行降序排序的方法,特别适用于当第一列数值相同时,继续按照第二列,乃至第三列进行排序的情况。通过自定义Comparator实现多列排序逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明

本博文首发于:
优快云 瑾兰https://blog.youkuaiyun.com/qq_28296925) 博客。
请注意:
无需授权即可转载;
甚至无需保留以上版权声明… …


情景:

有一个二维数组,我想按照第一,第二,第三列进行降序排列。

注意:
1、如果第一列数值相同,那么就按照第二列降序排列。
2、同理,如果第二列数值相同,那么就按照第三列降序排列。


代码如下:

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

注意:

1、如果想要升序排列,需要将sort()方法for()循环中的if判断修改一下。如下:

if (one[k] >two[k]) {    
          return 1;    
} else if (one[k] < two[k]) {    
            return -1;    
} else {    
       continue;  //如果按一条件比较结果相等,就使用第二个条件进行比较。  
}    

2、如果想要按照某几列进行排序,则需要修改sort()中的第二个参数final int[] order
比如,想要按照第一列,第三列进行排序。则如下:

sort(array,new int{0,2})

注意sort,第一个参数为进行排序的二维数组。


参考链接:
1、Java 多维数组 按某列 排序
2、Java entry

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值