重写了equals 必须重写hashCode方法:
如:s1和s2,equals相同, 放到hashMap里面,contains时,如果hashCode不同,则可能查找到table的不同位置,就会显示不包含这个对象。
我让hashCode()每次都返回一个固定的数行吗 有人可能会这样重写: [java] view plain copy print?在CODE上查看代码片派生到我的代码片 @Override public int hashCode() { return 10; } 如果这样的话,HashMap, HashSet等集合类就失去了其 "哈希的意义".用<Effective Java>中的话来说就是,哈希表退化成了链表.如果hashCode()每次都返回相同的数,那么所有的对象都会被放到同一个bucket中,每次执行查找操作都会遍历链表,这样就完全失去了哈希的作用.所以我们最好还是提供一个健壮的hashCode()为妙. 解决方案:取所有成员变量的每个字母的ascii码加在一起作为hashCode返回: String name="lc"; char[] arr=name.toCharArray(); int count=0; for(char c:arr){ System.out.println((int)c); count+=(int)c; }
转载请注明原文地址: https://ju.6miu.com/read-9466.html