HashMap 键和值,我需要一直定义 equals 和 hashCode() 吗?

问题描述 投票:0回答:1

我是java初学者,我有一个关于hashMap的问题。 让我们想象一下这个场景:

我有一个 Person 类:

 `Person a=new Person(int id, String fullName, int age)`

我没有在这个类上定义 equals 和 hashCode() 。

假设我想在 hashMap 中存储 10 个人,定义为:

 `Map<Integer,Person> hashMap=new HashMap<Integer,Person>();`

所以我将从数据库中获取人数,然后执行 for 循环:

 `
 String name="test"; int age="20";

 for(int i=size;i<size+10;i++)
 {

      hashMap.put(Integer.valuesOf(i), new Person(i,name+"i",age++));

 }`

我认为 hashMap 将使用 Integer 类的 hashCode(),我将获得一个唯一的哈希值,该哈希值将与 Person 对象一起存储在 hashMap 中, 如果我确定这个哈希值是唯一的,我不需要在对象上定义 hashCode() ,并且等于“否”?或者至少我需要定义相等,以便将来在两个人之间进行比较......

我错了吗?

java oop hashmap hashcode hash-collision
1个回答
0
投票

HashMap

key
需要实现一致的
hashCode
equals
。并不是说
hashCode
不必是唯一的,但越接近它,您获得的性能就越好。
java.lang.Integer
已经实现了这两个。

HashMap

value
不必实现任何内容,尽管如果您想使用
equals
,拥有 
containsValue
方法将会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.