使用Comparator对数组进行排序并保持索引位置

时间:2016-12-15 15:08:02

标签: java arrays comparator

我正在尝试使用Comparator在排序后跟踪数组值索引。我已经看到了其他地方的实现,但是我很难让它与我的代码协同工作。

我用我的索引值在[X] [0]和[X] [1]填充了我的2d数组中的随机值。

    import java.util.Arrays;
    import java.util.Comparator;
    public class ComparatorTest{

    static double testArray[][] = new double [10][10];

        public static void main(String[] args) {
            fillArray();
            setIndexVals();
        }

        public static void fillArray(){
            for(int row = 0; row < 10; row++){
                testArray[row][0] = Math.random();
                System.out.println(testArray[row][0]);
            }
        }

        public static void setIndexVals(){
            for (int row = 0; row < testArray.length; row++){
                testArray[row][1]= row + 1;
                System.out.println(testArray[row][1]);

            }
        }
        public static void sortArray(){
            Arrays.sort(testArray, new Comparator<int[]>(){
                public int compare(double[] value, double[] index){
                    return value[0]-index[0];
                }
            });
        }
    }

1 个答案:

答案 0 :(得分:0)

替换

# Enable CSS source maps for development
sourcemap = true

public int compare(double[] value, double[] index){
    return value[0]-index[0];
}

我选择重命名public int compare(double[] value1, double[] value2){ return Double.compare(value1[0], value2[0]); } 方法中的参数,因为它确实在2D数组中包含两个数组,而不是值和索引数组。如果您想比较索引,那么您可以比较comparevalue1[1]

但真正的解决方法是改变value2[1]因为你应该很少使用精确的比较来比较双打。