Set<Student> ts = new TreeSet<Student>(); for(Student s : studentInfo){ ts.add(s); } System.out.println(ts);
我已经在我的一个case块中编写了以上代码片段,以便对Student Objects的集合进行排序。我的问题是:使用这种方法和使用Collections.sort();方法有什么区别?
Collections.sort();
区别在于,a TreeSet可以使您始终对数据进行排序,而在上Collections.sort()调用时,该方法将对数据进行排序Set。
TreeSet
Collections.sort()
Set
的时间复杂度Collections.sort()是O(n*log(n))同时TreeSet的add()的复杂性log(n)。如果您使用相同大小的数据,则TreeSet的情况下的复杂度将相同,因为您需要重复add操作n时间。
O(n*log(n))
add()
log(n)
add
n
因此,您只需要决定是要一直Set订购还是在某个时候订购。如果您的代码中有某种情况下不需要排序,则不需要,TreeSet但如果始终需要对其进行排序,则应使用TreeSet。
请记住 ,如果要排序,则Set必须List先从中创建一个,这可能会带来一些开销!
List
另一个警告: 正如其他人所提到的,TreeSet您只能为1 Comparator提供1,而您可以为提供不同Comparator的Collections.sort()。因此,这 取决于您的用法 。您应该向我们提供有关您的用例的更多信息,以便为您提供完整的答案。
Comparator