我有一个像这样定义的TreeSet的ArrayList(在Java中),其中n是给定的数字。
ArrayList<TreeSet<Integer>>(n)
因为我知道TreeSet中的所有值都按升序排序,这使我的List保持未排序。现在我想基于每个TreeSet的第一个Element对List进行排序,以便对列表和所有树集进行排序。
是否可以使用list.get(i)对这些元素进行排序?这会搞砸我的TreeSet吗?
答案 0 :(得分:3)
我们说你已经初始化了ArrayList<TreeSet<Integer>>
;我们称之为list
。
您必须传递自定义Comparator<TreeSet<Integer>>
以对每个TreeSet<Integer>
进行排序:
Collections.sort(list, Comparator.comparing(TreeSet::first));
根据每个ArrayList<TreeSet<Integer>>
的第一个元素,按升序对TreeSet<Integer>
进行排序。
答案 1 :(得分:2)
您可以尝试使用自定义比较器对ArrayList
进行排序。在这种情况下,您的自定义比较器可以比较两个树集元素中的每一个的第一个数字。
Collections.sort(list, new ListOfTreeSetComparator());
class ListOfTreeSetComparator implements Comparator<TreeSet<Integer>> {
@Override
public int compare(TreeSet<Integer> ts1, TreeSet<Integer> ts2) {
return ts1.first().compareTo(ts2.first());
}
}
请注意,您的逻辑存在潜在问题。仅仅因为TreeSet
中每个ArrayList
中的第一个元素都有升序,并不一定意味着所有元素都会被排序。
答案 2 :(得分:1)
这里有一些你可以实现的粗略想法
Collections.sort(ArrayList, new Comparator<TreeSet<Integer>>() {
@Override
public int compare(TreeSet lhs, TreeSet rhs) {
// -1 - less than, 1 - greater than, 0 - equal
return lhs.first().compareTo(rhs.first());
}
});