Collections.sort()与通过添加到TreeSet中获取排序集合之间的区别?

时间:2013-09-12 09:42:34

标签: java algorithm data-structures collections

 Set<Student> ts = new TreeSet<Student>();

    for(Student s : studentInfo){
         ts.add(s);
    }

    System.out.println(ts);

为了对学生对象的集合进行排序,我在上面的一个case块中写了上面的代码片段。 我的问题是:使用此方法和使用Collections.sort();方法有什么区别。

2 个答案:

答案 0 :(得分:12)

不同之处在于TreeSet会始终对您的数据进行排序,而Collections.sort()方法会在您Set上调用该方法时对其进行排序。

Collections.sort()的时间复杂度为O(n*log(n))TreeSet add()的复杂度为log(n)。如果您使用相同大小的数据,则TreeSet的情况下的复杂性将相同,因为您重复add次操作n次。

因此,您只需要决定是要在任何时候订购Set,还是仅在某个时刻订购。如果您的代码中存在不需要排序的情况,那么您不需要TreeSet但如果您总是需要对其进行排序,那么您应该使用TreeSet

请注意如果您要对Set进行排序,则必须首先从中创建List,这可能会带来一些开销!

另一个警告:正如其他人提到的TreeSet只能提取1 Comparator,而您可以向Comparator提供不同的Collections.sort()。所以取决于您的使用情况。您应该向我们提供有关您的用例的更多信息,以便给您一个彻底的答案。

答案 1 :(得分:5)

1) TreeSet 就像所有 Set 一样,拒绝重复值。

2) TreeSet 每次插入元素时都会保持排序,而使用 Collections.sort()排序的列表只会在调用sort()之后进行排序(并且不会在add()上保持这种排序。)

3) Collections.sort()允许使用不同的比较器对不同标准上的列表进行排序。使用TreeSet,您还可以提供比较器,但是您需要为每个Comparator实例化一个TreeSet。