Java中Arraylist <integer>的ArrayList的字典排序

时间:2019-03-23 09:57:12

标签: java sorting arraylist

我想对ArrayList中的ArrayList<Integer>进行排序。

ArrayList<ArrayList<Integer>> allres = new ArrayList<ArrayList<Integer>>();
Collections.sort(allres, new Comparator<ArrayList<Integer>>() {
    public int compare(ArrayList<Integer> a, ArrayList<Integer> b) {
        for (int i = 0; i < a.size(); i++) {
            if (a.get(i) < b.get(i)) {
                return -1;
            } else if (a.get(i) == b.get(i)) {
                continue;
            } else {
                return 1;
            }
        }
        return -1;
    }
});

但是对于某些输入,它没有给出字典排序的结果。

1 个答案:

答案 0 :(得分:1)

包含1-1的比较器函数容易出错。

相反,您应该这样写:

public static int lexicographically(List<Integer> a, List<Integer> b) {
    for (int i = 0, end = Math.min(a.size(), b.size()); i < end; i++) {
        int res = Integer.compare(a.get(i), b.get(i));
        if (res != 0)
            return res;
    }
    return Integer.compare(a.size(), b.size());
}

这种编写比较器函数的样式可以防止各种常见错误,例如从不返回0。

这种样式中最重要的模式是:

  1. 通过第一个标准进行比较。
  2. 如果给定值不同,则返回比较结果并完成。
  3. 采用下一个条件,继续执行步骤1。
  4. 如果没有其他条件,请返回0。