按子ArrayList的长度对2d ArrayList进行排序

时间:2014-10-02 05:01:12

标签: java arrays sorting arraylist

我有一个二维数组:

ArrayList<List<Integer>> main= new ArrayList<>();    
ArrayList<Integer> sub=new ArrayList<>();
sub.add(1);
sub.add(2);
main.add(sub);
.............

现在主阵列看起来像

  main-> [[1,2],[3],[4,5,6],[6,6,8,4]]

现在我想按子数组的长度排序数组。我怎样才能获得以下结果?或者有没有办法在不经过循环的情况下获得子阵列的最大元素长度[在这种情况下为4]?没有循环可以得到4吗?我需要排序,但如果不可能,我想获得子数组maxlength=4的最大长度;

[[6,6,8,4],[4,5,6],[1,2],[3]]

1 个答案:

答案 0 :(得分:3)

以下是按子列表长度排序的一种方法:

您可以为两个Comparator创建一个ArrayList<Integer>来比较它们的长度,并将其用作Collections.sort()

中的比较器参数
class LengthComparator implements Comparator<ArrayList<Integer>> {
    public int compare(ArrayList<Integer> list1, ArrayList<Integer> list2) {
        return list2.size() - list1.size(); // sort descending in length
    }
}

// ...

ArrayList<ArrayList<Integer>> mainList;

// ... initialization, adding data

// sort
Collections.sort(mainList, new LengthComparator());

至于获得最大值而没有循环...不是真的。我的意思是你可以以不同的方式迭代结构,而不是循环(例如递归),但最后你必须检查每个元素......

想一想,如果你不把它与小组中的其他所有东西进行比较,你怎么知道某个群体中某些东西是否具有最大价值呢?