1、今天发现Collection接口有equals()和hashCode()两个方法,为什么要声明这两个方法呢?任何一个实现找个接口的类不都因为是Object的子类而已继承了Object的equals()和hashCode()方法了吗?
2、(这个不确定)记得以前要是两个接口有相同的方法,有一个类实现了这两个接口的话就出现问题,因为无法知道实现的是哪个接口的中方法,现在完全可以编译通过,然后运行了。(以前能不能通过忘记了)

解决方案 »

  1.   

    首先要对equals()和hashCode()两个方法要认识(知道其功能):
    equals():
    它是用于进行两个对象的比较的,是对象内容的 比较,当然也能用于进行对象参阅值的比较。什么是对象参阅值的比较?就 是两个参阅变量的值得比较,我们 都知道参阅变量的值其实就是一个数字,这个数字可以看成是鉴别不同对象的代号。两个对象参阅值的比较,就是两个数字的比较,两个代号的比较。这种比较是默 认的对象比较方式,在Object这个对象中,这种方式就已经设计好了。所以你也不用自己来重写,浪费不必要的时间。
    对象内容的比较才是设计equals()的真正目的,Java语言对equals()的要求如下,这些要求是必须遵循的。否则,你就不该浪费时间:
    对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
    反射性:x.equals(x)必须返回是“true”。
    类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
    还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
    任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
    hashCode():
    这个函数返回的就是一个用来进行hash操作的整型代号,请不要把这个代号和前面所说的参阅变量所代表的代号弄混了。后者不仅仅是个代号还具有在内存中才查找对 象的位置的功能。hashCode()所返回的值是用来分类对象在一些特定的Collection对象中的位置。这些对象是HashMap, Hashtable, HashSet,等等。这个函数和上面的equals()函数必须自己设计,用来协助HashMap, Hashtable, HashSet,等等对自己所收集的大量对象进行搜寻和定位。参见:http://yangwen.blog.51cto.com/337928/97867