如何从给定的索引开始对多维数组进行排序

时间:2012-02-15 09:54:59

标签: java sorting

我尝试只对数组的选定部分进行排序。

我试过这段代码:

public static void shortArray(String[][] array){
    Arrays.sort(array, new Comparator<String[]>() {
        @Override
        public int compare(final String[] entry1, final String[] entry2) {
            final float time1 = Float.parseFloat(entry1[1]);
            final float time2 = Float.parseFloat(entry2[1]);
            if (time2 > time1) {
                return 1;
            } else if (time2 == time1) {
                return 0;
            } else {
                return -1;
            }
        }
    });
}

但它会对整个数组进行排序。

有没有办法从特定索引开始排序?

2 个答案:

答案 0 :(得分:4)

是的,通过创建数组的列表视图(通过Arrays.asList),并使用list.subListCollections.sort对其中的一部分进行排序。

String[][] arr = {{"5.0","a"},{"3.0","b"},{"2.0","c"},{"4.0","d"},{"1.0","e"}};

// Sort elements in range 2 ... arr.length
List<String[]> sublist = Arrays.asList(arr).subList(2, arr.length);
Collections.sort(sublist, new Comparator<String[]>() {
    @Override
    public int compare(String[] a1, String[] a2) {
        return Float.valueOf(a1[0]).compareTo(Float.valueOf(a2[0]));
    }
});


// Prints [[5.0, a], [3.0, b], [1.0, e], [2.0, c], [4.0, d]]
//         ^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//            not affected         sorted by first index
System.out.println(Arrays.deepToString(arr));

答案 1 :(得分:1)

从主列表中获取子列表,从特定索引(您需要)开始。然后使用

Collections.sort(sublist)

希望有所帮助。