1.关于comparable 与comparator  都是具有comparareto()方法 但是我不知道这二者的区别 该什么时候用
2.关于equals与hashCode  众所周知确定自定义类对象是否相等需要重写euqals()方法 和hashCode()方法 但是equals我知道  但重写hashcode方法 有什么必要呢  我查看了java Object源码似乎并没有发现 equals需要用到hashCode这个方法  
希望高手给我解答下这个问题 谢谢····

解决方案 »

  1.   

    1、Comparable说明的是这个类支持比较大小,可以比较出这个实例与其它实例的大小
       Comparator说明的是这个是一个专用的比较类,用于比较其他两个实例的大小(它自己没有大小比较之说)2、如果你的类从来不会放在Map或者Set中,则不重写也不会导致任何错误,但是建议重写。这个方法其实主要是用于Map、Set中的,用于快速定位实例的存放位置
      

  2.   

    1、一个类只能事先一个Comparable接口,但是你可能希望对这个类事先多种比较方法,这时就需要使用Comparator。比如String对象,你即想普通自然排序,又想不区分大小写下自然排序,或者还想按照英文字符-中文字符-其他字符的顺序排序,这时就可以实现几个Comparator,在程序中选择使用哪一个。
    2、最好重写hashCode方法,因为你定义的这个类可能在以后被(自己/其他程序员)放入诸如HashMap等数据结构中
      

  3.   

    1、Comparable说明的是这个类支持比较大小,可以比较出这个实例与其它实例的大小
      Comparator说明的是这个是一个专用的比较类,用于比较其他两个实例的大小(它自己没有大小比较之说)
    2、集合的查找对象 或 当做 key 时 需要重写 equals 和 hashCode,
       比如说 indexOf(Object),containts(Object),
        map.put(Object key,Object value),set.add  (Object o)
        调用这些方法时  会比较 对象 的 equals 和 hashcode , 都相同时才认为相同
       
      

  4.   

    楼上很多都说到了,只是补充一点:The general contract of hashCode is: 
    其中一点
    If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. hashcode是有契约的,要求equal的对象彼此hashcode也相同,才认为是同一个对象,很多方法都是这么判断的,3楼提到了,如果只重写equals的话,会影响对是否是同一个对象的判断Comparable表示能力,表示该对象可比较,Comparator是个比较器,用于比较两个对象,它的两个方法compare,equals