对TreeSet的ArrayList进行排序

时间:2017-05-07 14:21:17

标签: java sorting arraylist collections treeset

我有一个像这样定义的TreeSet的ArrayList(在Java中),其中n是给定的数字。

ArrayList<TreeSet<Integer>>(n)

因为我知道TreeSet中的所有值都按升序排序,这使我的List保持未排序。现在我想基于每个TreeSet的第一个Element对List进行排序,以便对列表和所有树集进行排序。

是否可以使用list.get(i)对这些元素进行排序?这会搞砸我的TreeSet吗?

3 个答案:

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