package com.day2;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class Test2 {
public static void main(String[] args) {
ByLength byLength = new ByLength();
List<String> names = new ArrayList<String>();
names.add("Tom");
names.add("Andy");
names.add("Li");
names.add("Wang");
names.add("Zhang");
Collections.sort(names, byLength);
System.out.println(names);
}
}class ByLength implements Comparator<String> {
public int compare(String o1, String o2) {

return -(o1.length() - o2.length());
}
}为什么comparator借口可以不用实现equals抽象方法。。求解  跪求解  谢谢谢谢

解决方案 »

  1.   

    所有对象的基类:Object,已经自带equals了。所以你不写equals也不会出错,但其结果恐怕就不是你想要的了。
      

  2.   

    comparator接口是用来为集合排序,用equals干什么啊?
      

  3.   

    Comparator 的compare方法是比较两个Object或者其他类。这跟Comparator这个接口有什么关系,为什么Comparator要重写equals方法?而且如果没有用到o1.compareTo(o2);如果o1和o2是自定义类, o1和o2都不要实现equals方法。如果不是自定义类,一般自带了equals方法的重写,或者父类的equals方法够用,不用重写。
      

  4.   

    而且如果没有用到o1.compareTo(o2);如果o1和o2是自定义类, o1和o2都不要实现equals方法。
    ----------无视这句话,compareTo()方法,可以不用自定义类的equals。
      

  5.   

    Comparator 的compare方法是比较两个Object或者其他类。这跟Comparator这个接口有什么关系,为什么Comparator要重写equals方法?而且如果没有用到o1.compareTo(o2);如果o1和o2是自定义类, o1和o2都不要实现equals方法。如果不是自定义类,一般自带了equals方法的重写,或者父类的equals方法够用,不用重写。
      

  6.   

    equals方法,并不是抽象的,如果不需要,就可以不用自己实现
      

  7.   

    你们是不是搞错了啊,,,,我知道不用重写equals  但comparator中不是有2个抽象方法么继承comparator接口一定要实现接口所有方法  这是定义 不是我说的。。为什么比较时候不用实现equals抽象方法可以?
      

  8.   

    你自定义的任意一个类,都是继承自Object的,而Object已经实现了equals方法
    因此,虽然接口定义了equals方法,也不需要去实现再比如:interface iA {
    void a();
    }interface iB {
    void b();
    }class A {
    public void a() {
    } public void b() { }
    }class B extends A implements iA, iB {
    // B实现了iA,iB2个接口,但是因为在A类里已经有了,所有一个方法都不需要实现,也是可以通过编译的
    }
      

  9.   

    equals本来就有默认实现
    只是不符合你的要求时才重写