对 TreeSet 的 ArrayList 进行排序

Sorting ArrayList of TreeSets

我有一个这样定义的 TreeSet 数组列表(在 Java 中),其中 n 是某个给定的数字。

ArrayList<TreeSet<Integer>>(n)

因为我知道 TreeSet 中的所有值都是按升序排序的,所以我的列表未排序。现在我想根据每个 TreeSet 的第一个元素对我的列表进行排序,以便对列表和所有树集进行排序。

是否可以仅对我使用 list.get(i) 获得的这些元素进行排序?这也会弄乱我的 TreeSets 吗?

假设您已经初始化了一个 ArrayList<TreeSet<Integer>>;我们称之为 list.

您必须通过自定义 Comparator<TreeSet<Integer>> 来对每个 TreeSet<Integer>:

进行排序
Collections.sort(list, Comparator.comparing(TreeSet::first));

这将根据每个 TreeSet<Integer> 的第一个元素按升序对 ArrayList<TreeSet<Integer>> 进行排序。

您可以尝试使用自定义比较器对 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 中的 first 元素在您的 ArrayList 中具有升序并不一定意味着所有元素都会被排序。

这里有一些你可以实现的粗略想法

 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());
            }
        });