如何对二维ArrayList进行排序

Bel*_*ver 5 java sorting arraylist multidimensional-array

我有一个包含双值的二维ArrayList:

ArrayList<ArrayList<Double>> data = new ArrayList<ArrayList<Double>>(); 
Run Code Online (Sandbox Code Playgroud)

与经典数组类似,我想对这个矩阵的"cols"进行排序:我想在子ArrayLists中获取具有相同索引的项,然后对它们进行排序.就像为每一列调用Collections.sort()一样......按行我的意思是外层和内层是列.

这样做的正确方法是什么?我想迭代矩阵来反转它然后用Collections.sort()排序每一行?但也许它不是最好的解决方案,因为矩阵大约是400*7000.

我不能使用经典数组,因为矩阵的大小是未知的.

感谢帮助.

Sar*_*tha 3

做这样的事情:

    final int COLUMN = 5;
    Comparator<ArrayList<Double>> myComparator = new Comparator<ArrayList<Double>>() {
        @Override
        public int compare(ArrayList<Double> o1, ArrayList<Double> o2) {
            return o1.get(COLUMN).compareTo(o2.get(COLUMN));
        }
    };
    Collections.sort(list, myComparator);
Run Code Online (Sandbox Code Playgroud)

将 COLUMN 设置为您要排序的任何列。

更新:

是的,这根本行不通。

我喜欢 ahanin 的第二个建议,即制作你自己的列表来包装你的原始列表。您还必须包装 get() 返回的对象,以便变量wrappedList 包含列值,并且wrappedList.get(0) 也返回一列值。然后排序就可以工作了。我想知道您必须实现 Collections.sort() 才能在列表上工作的最少方法是什么。

最简单的方法可能是采用别人的快速排序并使其适用于您的列表。

这是一种实现:http://www.vogella.de/articles/JavaAlgorithmsQuicksort/article.html