对Java列表中的列表进行排序

时间:2015-12-02 15:32:44

标签: java algorithm sorting

有列表清单。例如

{{ 4,  5,  3,  1,  2},
 {14, 15, 13, 11, 12},
 {24, 25, 23, 21, 22}}

我需要对这些列表中的值进行排序,以便根据第一个List对每个List的值进行排序。所以结果应该是

{{ 1,  2,  3,  4,  5},
 {11, 12, 13, 14, 15},
 {21, 22, 23, 24, 25}}

在Java中有效实现这一目标的最佳方法是什么?我尝试以某种方式考虑使用Collections.sort,但我不知道。任何帮助和建议将不胜感激

UPD:对不清楚的问题,我会尽力澄清。我有矩阵,我需要对矩阵的列进行排序。我应该在特定的行(我的例子中的第一行)上对它们进行排序。但矩阵表示为列表列表(不是二维数组)。矩阵可以足够大。而且我不想自己实现排序(因为我相信Java Collections / Arrays sort()方法可以有效地实现)。正如我已经说过的,矩阵可能很大,所以我不想在排序算法的每一步中重新排列每个List中的元素。

我看到的只是排序第一个列表得到一些排列(我可以使用sort()方法实现这个吗?)。然后根据这种排列,我想重新排列矩阵中的其他元素。但我不确定这是一个好方法。

3 个答案:

答案 0 :(得分:1)

如果我正确地阅读您的问题,您希望对父列表结构中的每个内部列表进行排序。然后,使用自定义比较器检查订单。

对父列表中的子列表进行排序

 for (List l : parentList) {
     Collections.sort(l); 
 }

检查以确保列表已按顺序

 Collections.sort(parentList, new ListComparator<List<Integer>>())

自定义比较器,用于评估每个列表的第一个索引

 public ListComparator extends Comparator<List<Integer>> {

     @Override
     public int compareTo(List<Integer> thisList, List<Integer> thatList) {
         return thisList.get(0).compareTo(thatList.get(0);
     }
 }

答案 1 :(得分:0)

Collections.sort()是一种合理的方法。您需要实现一个自定义的Comparator对象并遍历您的外部列表,对每个内部列表进行排序。如有必要,您还可以实现Comparator来对外部列表中的列表进行排序。

This tutorial有一个很好的例子。

答案 2 :(得分:0)

查看Column Comparator。它允许您对List的任何列进行排序。因此,您只需将列作为参数传递给ColumnComparator,而不是为指定列创建不同的Comparator。

ColumnComparator可用于对数组或列表进行排序。