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

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

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

    System.out.println(ts);

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


答案 1

不同之处在于,a 使数据始终保持排序状态,而当您在 上调用方法时,该方法会对数据进行排序。TreeSetCollections.sort()Set

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

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

请记住,如果要进行排序,则必须首先从中创建一个,这可能会引入一些开销!SetList

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


答案 2

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

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

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