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

Difference between Collections.sort() and getting a sorted collection by adding into a TreeSet?

1
2
3
4
5
6
7
 Set<Student> ts = new TreeSet<Student>();

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

    System.out.println(ts);

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


区别在于TreeSet始终保持数据排序,而Collections.sort()方法在Set上调用方法时对其进行排序。

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

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

请记住,如果你想对你的Set进行排序,你必须先从它创建一个List,这可能会带来一些开销!

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


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

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

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