Java对ArrayList进行排序

时间:2019-03-14 11:24:10

标签: java arraylist collections

在对包含ArrayList的ArrayList进行排序时遇到一些问题

ArrayList<ArrayList<String>> multiMarkArray = new ArrayList<ArrayList<String>>();

String line;
while ((line = bufRdr.readLine()) != null) {
    ArrayList<String> singleMarkArray = new ArrayList<String>();
    for (String word : line.split(" ")) {
        singleMarkArray.add(word);
    }
    Collections.swap(singleMarkArray, 0, 1);
    multiMarkArray.add(singleMarkArray);
}

Collections.sort(multiMarkArray);
System.out.println(multiMarkArray);

出现错误 Collections 不能应用于(java.util.ArrayList>)

有人可以指出正确的方向来解决这个问题吗?

谢谢

4 个答案:

答案 0 :(得分:2)

如果要对multiMarkArray中包含的所有列表进行排序,则应该

for (ArrayList<String> strings : multiMarkArray) {
       Collections.sort(strings);
}

代替

Collections.sort(multiMarkArray);

这将对每个列表中的字符串进行排序。但是multiMarkArray中列表的排序不会受到影响。

答案 1 :(得分:1)

您只能对包含实现Comparable的元素的Collection进行排序。

答案 2 :(得分:0)

要排序,您需要一个排序条件。 ArrayList没有内置的排序标准,因为没有自然的方法可以比较两个ArrayList。

您必须通过使用两个参数调用sort的版本并传递Comparator<ArrayList<String>>来提供条件。

答案 3 :(得分:0)

集合sort适用于“可比较”对象(extends Comparable):

public static <T extends Comparable<? super T>> void sort(List<T> list)
Sorts the specified list into ascending order, according to the natural ordering of its elements. 

或者您可以使用自己的比较器发送带有第二个参数的排序方法:

public static <T> void sort(List<T> list,
            Comparator<? super T> c)
Sorts the specified list according to the order induced by the specified comparator.