繁体   English   中英

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

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

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

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

    System.out.println(ts);

为了对学生对象的集合进行排序,我在上面的一个case块中写了上面的代码片段。 我的问题是:使用这种方法和使用Collections.sort();什么区别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而你可以为Collections.sort()提供不同的Comparator 所以这取决于你的用法 您应该向我们提供有关您的用例的更多信息,以便给您一个彻底的答案。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM