黑马程序员技术交流社区
标题:
TreeSet 排序比较问题
[打印本页]
作者:
坚强
时间:
2011-11-17 14:42
标题:
TreeSet 排序比较问题
有两种方式:1 对象中实现Comparable接口,重写compareTo()方法;2 自定义类实现Comparator,重写compare()方法,通过构造函数加载。
我想知道这两个方法有什么不同?除了在TreeSet中的不同以外,在其他的地方还有哪些不同?
作者:
quanhui
时间:
2011-11-17 15:07
1. Comparable 是在类的内部实现的,当类实现了Comparable接口时,该类的集合如ArrayList就可以通过ArrayList。Sort进行排序了。Comparator是在类外部重新实现一个比较器。
2. 如果某个类没有实现Comparable接口,而这个类又不是你自己写的无法更改其代码时,你可以自己写一个类实现Comparator接口,然后通过这个新的类进行比较。
3. Comparator可以实现多种比较方式,而Comparable 只能以一种方式进行比较。比如我们有Person类,有Age和Name属性。当实现Comparable 时我们可能只能制定通过Age或Name进行排序。然而我们却可以实现两个类:AgeComparator 和NameComparator 来达到根据不同情况对不同属性进行排序的效果。
作者:
任俊杰
时间:
2011-11-17 16:40
在内部实现的就相当于给这个TreeSet一种默认的排序方式,每次添加的时候它就会去比较一下,把要添加的东西放在相应的位置。而外部实现的,只有调用一次sort的时候,并给出外部的那个比较器,才按照外部的那个排。
作者:
宋文轩
时间:
2011-11-17 17:02
外部的排序比较灵活,只要在建立集合的时候传入想要用的比较器就可以了,不必在对象的内部就定义。
作者:
坚强
时间:
2011-11-18 21:08
嗯 谢谢你们,我似乎明白了一点。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2