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。