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


 Set<Student> ts = new TreeSet<Student>();
    for(Student s : studentInfo){
         ts.add(s);
    }
    System.out.println(ts);

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

不同之处在于,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,而您可以向 Collections.sort() 提供不同的Comparator。所以这取决于你的使用情况。您应该向我们提供有关您的用例的更多信息,以便为您提供全面的答案。

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

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

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

最新更新