Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于第二列的二维整数数组排序_Java_Arrays_Sorting - Fatal编程技术网

Java 基于第二列的二维整数数组排序

Java 基于第二列的二维整数数组排序,java,arrays,sorting,Java,Arrays,Sorting,我已经创建了一个二维数组,希望根据第二列对其进行排序。我已经检查了其他变体,但它们似乎不起作用 目前数据显示为第一组,我想得到第二组 0 0 0 0 1 1065 6 24 2 70 3 60 3 60 2 70 4 90 4 90 5 251 5 251 6 24 7 558 7 558

我已经创建了一个二维数组,希望根据第二列对其进行排序。我已经检查了其他变体,但它们似乎不起作用

目前数据显示为第一组,我想得到第二组

0 0                 0 0
1 1065              6 24
2 70                3 60
3 60                2 70
4 90                4 90
5 251               5 251
6 24                7 558
7 558               1 1065 
我现在的代码是:

import java.util.Arrays;
import java.util.Comparator;

public class Testing {

public static void test() {
    int[][] arrayToSort = {{0, 1,2,3,4,5,6,7}, {0, 1065, 70, 60,90,251,24,558}};

}

public static void sortArray(int myArray[][]) {
    Arrays.sort(myArray, new Comparator<int[]>() {

        @Override
        public int compare(int[] o1, int[] o2) {
            return Integer.valueOf(o1[1]).compareTo(Integer.valueOf(o2[1]));
        }

    });
}
导入java.util.array;
导入java.util.Comparator;
公共类测试{
公共静态无效测试(){
int[]arrayToSort={0,1,2,3,4,5,6,7},{0,1065,70,60,90251,24558};
}
公共静态void sortArray(int myArray[]]{
sort(myArray,newcomparator(){
@凌驾
公共整数比较(整数[]o1,整数[]o2){
返回Integer.valueOf(o1[1]).compareTo(Integer.valueOf(o2[1]));
}
});
}

}

您可以使用TreeMap将数组的第二行存储为键,第一行存储为值

因为键、值是整数,所以不需要创建任何新的Comparator/Comparable类来对它们进行排序。TreeMap将自动按升序存储它们

public static void main(String[] args)  {
int[][] ax = {{0, 1,2,3,4,5,6,7}, 
              {0, 1065, 70, 60,90,251,24,558} };

        Map<Integer,Integer> map = new TreeMap<>();

        for (int i = 0; i < ax[0].length; i++) {
            map.put(ax[1][i], ax[0][i] );
        }

    // Iterate over the TreeMap to get as per your wish order

       for (Map.Entry<Integer, String> entry : map.entrySet()) {
        System.out.println("Key : " + entry.getKey() 
                                  + " Value : " + entry.getValue());
    }

    }
publicstaticvoidmain(字符串[]args){
int[]ax={{0,1,2,3,4,5,6,7},
{0, 1065, 70, 60,90,251,24,558} };
Map Map=newtreemap();
对于(int i=0;i
您的方法是对外部数组进行排序,该数组仅包含两个元素(即数组)。把你的问题想象成有两个独立的数组:
{0,1,2,3,4,5,6,7}
{01065,70,60,90251,24558}
。然后,您的问题是对第二个数组进行排序,并在第一个数组中完成相同的交换。我想说,您的数据结构通常不适合此任务。考虑有一对成对的列表:

public class Testing {

    private static class MyNumber {
        private final int id;
        private final int number;

        public MyNumber(int id, int number) {
            this.id = id;
            this.number = number;
        }

        public int getId() {
            return id;
        }

        public int getNumber() {
            return number;
        }
    }

    public static void main(String[] args) {
        int[][] arrayToSort = {
                {0, 1,    2,  3,  4,  5,   6,  7  },
                {0, 1065, 70, 60, 90, 251, 24, 558}
        };

        List<MyNumber> list = IntStream.range(0, arrayToSort[0].length)
                .mapToObj(i -> new MyNumber(arrayToSort[0][i], arrayToSort[1][i]))
                .collect(toList());

        Collections.sort(list, Comparator.comparing(MyNumber::getNumber));

        for (MyNumber myNumber : list) {
            System.out.println(myNumber.getId() + " " + myNumber.getNumber());
        }
    }
}
公共类测试{
私有静态类MyNumber{
私有最终int id;
私人最终整数;
公共MyNumber(整数id,整数编号){
this.id=id;
这个数字=数字;
}
公共int getId(){
返回id;
}
public int getNumber(){
返回号码;
}
}
公共静态void main(字符串[]args){
int[][]数组排序={
{0, 1,    2,  3,  4,  5,   6,  7  },
{0, 1065, 70, 60, 90, 251, 24, 558}
};
List List=IntStream.range(0,arrayToSort[0]。长度)
.mapToObj(i->新MyNumber(arrayToSort[0][i],arrayToSort[1][i]))
.collect(toList());
Collections.sort(list,Comparator.comparing(MyNumber::getNumber));
对于(我的编号我的编号:列表){
System.out.println(myNumber.getId()+“”+myNumber.getNumber());
}
}
}

是否要对所有列进行排序??第二个例子中,由于第二列的顺序,第一列的顺序不正确……您当前的输出是什么?我只需要对第一列进行排序,因为这些数字是成对的。第一列是索引,第二列是距离。我当前的输出是第一组。