为什么我们要覆盖equals()和hashCode()方法,hashcode如何在hashMap和treeSet操作中工


  1. 有人可以解释一下,为什么我们每次编写新类时都必须实现hashCode()和equals()方法?为新类编写hashCode()和equals()是一个很好的做法吗?

  2. hashcode() 在 hashMap 中是如何工作的?

  3. 为什么树集排序像?

条目

"102. Hello one o two"
"12. Hello twelve"
"1. Hello One" 

以下列方式

"1. Hello One"
"102. Hello one o two"
"12. Hello twelve"

提前谢谢。

  1. 如果未重写,则继承在 Object 上定义的版本,这些版本仅适用于对象标识,而不是对象的值。作为对象的设计者,您可以说出它的"值"是什么,以便进行相等测试,并定义与该定义一致的适当 .equals() 和 .hashCode 操作。

  2. https://stackoverflow.com/questions/1894377/understanding-the-workings-of-equals-and-hashcode-in-a-hashmap?rq=1

  3. (如另一个答案所述 - 如果您要插入字符串,则会从左到右比较并按词法排序。

  1. 您不需要这样做,仅当您使用它们来比较相等性或放置在 Hash* 中时。否则,标准对象实现就可以了。

  2. http://en.wikipedia.org/wiki/Hash_tablehttp://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

  3. 因为它是按字母顺序排列的字符串排序,0.之后但在2之前。

最新更新