关于JAVA 中容器的equals方法 与hashCode()方法,请帮忙看看。
关于容器有这样的一段说明:只要我们要把我们对象放在容器中,要让我们对象成为key-value的key时,我们必须正确地重写hashCode()方法。HashSet,LinkedHashSet,HashMap,这3个容器都是把对象当做KEY 在使用么??
那么在什么容器中,容器把对象不当做KEY 使用呢??

解决方案 »

  1.   

    对于两个对象,如果equals方法比较返回true,则两个对象的hashcode值必须是相同的。其次hashset底层维护的其实就是map,用add方法将对象放到set里面时其实就是放在key上,value则是公共的object对象(用不上),而map底层所维护的就是数组(entry[]),维护的一个个entry对象,entry对象里面维护的才是(key value),看看源码理解一下
      

  2.   

    比如ArrayList,就不会把对象当KEY使用。不过我觉得楼主不需要纠结于什么地方不当作KEY使用;对所有VO类对象,重写hashCode()是一个好习惯,因为做快速查找和匹配的时候,不少地方都是先比较hashCode的。比如你重写equals来判断两个VO对象内容是否相等,那么可以先比较这两个VO对象的hashCode,不相等就不用继续下去了。相等再继续去比较VO的每一个属性。