`

Seaeast&collection——equals&hashcode

 
阅读更多
    如果需要把一个对象放入HashSet中时,如果重写该对象对应类的equals()方法,应用应该重写其hashcode()方法,其规则是:如果两个对象通过equals方法比较返回true时,这两个对象的hashcode也应该相同。

    如果两个对象通过equals方法比较返回true,但这两个对象的hashcode()方法返回不同的hashcode时,这将导致hashset将会把这两个对象保存在hashset的不同位置,从而两个对象都可以添加成功,这与set集合的规则有点出入。
   
    如果两个对象的hashcode()方法返回的hashcode相同,但他们通过equals方法比较返回false时将更麻烦:因为两个对象的hashcode值相同,hshset将试图把他们保存在同一个位置,但实际上又不行(否则将只剩下一个对象),所以处理起来比较复杂;而且hashset访问集合元素时也是根据元素的hashcode的值来访问的,如果hashset中包含两个元素有相同的hashcode值,将会导致性能下降。
    当两个对象通过equals方法比较返回true时,这两个对象的hashcode应该相等。
    对象中用作equals比较标准的属性,都应该用来计算hashcode值。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics