我有一个二维数组:
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]]
答案 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());
至于获得最大值而没有循环...不是真的。我的意思是你可以以不同的方式迭代结构,而不是循环(例如递归),但最后你必须检查每个元素......
想一想,如果你不把它与小组中的其他所有东西进行比较,你怎么知道某个群体中某些东西是否具有最大价值呢?