1.关于comparable 与comparator 都是具有comparareto()方法 但是我不知道这二者的区别 该什么时候用
2.关于equals与hashCode 众所周知确定自定义类对象是否相等需要重写euqals()方法 和hashCode()方法 但是equals我知道 但重写hashcode方法 有什么必要呢 我查看了java Object源码似乎并没有发现 equals需要用到hashCode这个方法
希望高手给我解答下这个问题 谢谢····
2.关于equals与hashCode 众所周知确定自定义类对象是否相等需要重写euqals()方法 和hashCode()方法 但是equals我知道 但重写hashcode方法 有什么必要呢 我查看了java Object源码似乎并没有发现 equals需要用到hashCode这个方法
希望高手给我解答下这个问题 谢谢····
Comparator说明的是这个是一个专用的比较类,用于比较其他两个实例的大小(它自己没有大小比较之说)2、如果你的类从来不会放在Map或者Set中,则不重写也不会导致任何错误,但是建议重写。这个方法其实主要是用于Map、Set中的,用于快速定位实例的存放位置
2、最好重写hashCode方法,因为你定义的这个类可能在以后被(自己/其他程序员)放入诸如HashMap等数据结构中
Comparator说明的是这个是一个专用的比较类,用于比较其他两个实例的大小(它自己没有大小比较之说)
2、集合的查找对象 或 当做 key 时 需要重写 equals 和 hashCode,
比如说 indexOf(Object),containts(Object),
map.put(Object key,Object value),set.add (Object o)
调用这些方法时 会比较 对象 的 equals 和 hashcode , 都相同时才认为相同
其中一点
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