【发布时间】:2020-09-11 04:46:21
【问题描述】:
众所周知,我们可以使用任何 Object 作为 Java HashMap 中的键,只要它遵循 equals 和 hashCode 协定。 但是我在某处读过它——如果自定义对象是不可变的,那么这已经被处理了。 这是否意味着如果我的自定义对象是不可变的,我不需要重写 hashcode 和 equals 方法以使其有资格将其用作我的 hashmap 的键。
我的理解是这是错误的,即使我的自定义对象是不可变的,它也必须重写 hashcode 和 equals 方法才能使其符合 hashmap 键的条件。 如果你们有不同的看法,请发表评论。
【问题讨论】:
-
你能澄清一下在java对象中实现不可变是什么意思吗?你可以让java对象只有构造函数+getter而没有setter,你可以调用不可变的。如果是这种情况,你仍然需要有equal和hashcode
-
是的,Chayne,完全按照您描述的方式实现不可变类。因此,根据您的说法,我们仍然需要覆盖 hashcode 和 equals 方法,以使我的地图条目插入和搜索正确。
标签: java