Set<Student> ts = new TreeSet<Student>();
for(Student s : studentInfo){
ts.add(s);
}
System.out.println(ts);
为了对学生对象的集合进行排序,我在上面的一个case块中写了上面的代码片段。
我的问题是:使用此方法和使用Collections.sort();
方法有什么区别。
答案 0 :(得分:12)
不同之处在于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
,而您可以向Comparator
提供不同的Collections.sort()
。所以取决于您的使用情况。您应该向我们提供有关您的用例的更多信息,以便给您一个彻底的答案。
答案 1 :(得分:5)
1) TreeSet 就像所有 Set 一样,拒绝重复值。
2) TreeSet 每次插入元素时都会保持排序,而使用 Collections.sort()排序的列表只会在调用sort()之后进行排序(并且不会在add()上保持这种排序。)
3) Collections.sort()允许使用不同的比较器对不同标准上的列表进行排序。使用TreeSet,您还可以提供比较器,但是您需要为每个Comparator实例化一个TreeSet。