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

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

    System.out.println(ts);

I've written this above snippet in one of my case block in order to sort a collection of Student Objects. My question is: What is the difference between using this approach and using Collections.sort(); method.

4

2 回答 2

13

不同之处在于,TreeSetCollections.sort()您在Set.

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

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

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

另一个警告:正如其他人提到的,你可以提供不同的 s时TreeSet只能取 1 。所以这取决于你的使用情况。您应该向我们提供有关您的用例的更多信息,以便为您提供全面的答案。ComparatorComparatorCollections.sort()

于 2013-09-12T09:45:31.613 回答
7

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

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

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

于 2013-09-12T09:48:35.453 回答