重写equals和hashCode

    xiaoxiao2021-03-25  114

    重写了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

    最新回复(0)