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

标签 java algorithm data-structures collections

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

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

    System.out.println(ts);

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

最佳答案

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

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

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

请记住,如果您想对Set 进行排序,您必须首先从中创建一个List,这可能会引入一些开销!

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

关于java - Collections.sort() 和通过添加到 TreeSet 中获取排序集合之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18760752/

相关文章:

c# - 在 C# 中从具有依赖接口(interface)的抽象类继承的正确方法

algorithm - 写一个写程序的程序

java - Android Studio中的assembleDebug错误

java - XYBarChart 和 ClusteredXYBarRenderer - 指定自定义缩放级别

arrays - 比较排序数组的算法

if 子句可以用作循环吗? (数据结构,C语言)

java - 调用 set 方法而不调用构造函数

algorithm - 使用单词字典将字符串 a 转换为 b

java - 在 Activity 中单击按钮时在回收器 View 和 fragment 之间切换

java - 无法通过记录器解析 com.android.packageinstaller Espresso 生成的代码