本帖最后由 qixing0918 于 2013-10-28 13:31 编辑
1.表面上 都是接口 comparable 是在类内 如Person继承comparable 实现方法- public int compareTo(Object o) {
- Person p = (Person) o;
- // return this.age=p.age;
- return this.name.compareTo(p.name);
- }
复制代码 而comparator是自定义比较器 需要在TreeSet生成时传入 - public class Test {
- public static void main(String[] args) {
- Collection c = new TreeSet(new myComparator());
- c.add(new Person("zhangsa", 15));
- c.add(new Person("zhangsan", 12));
- // c.add("nihao");
- // c.add("nihoa1");
- for (Iterator it = c.iterator(); it.hasNext();) {
- System.out.println(it.next());
- }
- }
- }
- class myComparator implements Comparator {
- @Override
- public int compare(Object o1, Object o2) {
- Person p1 = (Person) o1;
- Person p2 = (Person) o2;
- return p1.getAge() - p2.getAge();
- }
- }
复制代码 2.当两个比较器都有时那个优先级高 我测试了 comparator 覆盖comparable 也就是说如果都有要执行comparator的比较器
3.comparator 是util包中的 comparable 是lang包中的 像String 实现comparable 有字符比较方法compareTo() 就想Person需要实现comparable一样
4.comparable是支持自比较的 看需要实现的抽象方法
public int compareTo(Object o) {
Person p = (Person) o;
// return this.age=p.age;
return this.name.compareTo(p.name);
}
只需要传进来一个参数 而comparator 的抽象方法
public int compare(Object o1, Object o2) {
Person p1 = (Person)o1;
Person p2 = (Person)o2;
return p1.getAge()-p2.getAge();
}
需要两个参数 说明了什么 从方法定义上就能看成comparable 不能放在类外 他需要类的支持
|