![](/img/trans.png)
[英]Java Collections: IF the key of Hashmap is Immutable Object then do we need to override hashcode and equals?
[英]Do we have to override equals/hashcode for enums which are put in a hashmap
我有一个枚举类,如下所示。
public enum Item {
COKE("Coke", 25), PEPSI("Pepsi", 35), SODA("Soda", 45);
private String name;
private int price;
private Item(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public long getPrice() {
return price;
}
}
和哈希图定义如下
private Map<Item, Integer> inventory = new HashMap<Item, Integer>();
我是否需要覆盖枚举Item
类中的哈希码和等于值,才能使venture.put inventory.put()
和inventory.get()
正常工作? 如果没有,为什么?
不,你没有。 为什么? 因为已经提供了这些方法的合理实现。
而且即使您愿意,也不能这样做,因为这些方法在枚举中是final
的。
但是,也不要使用枚举键类型的HashMap
:使用EnumMap
,它专门用于枚举键,并且不使用hashCode
或equals
(它实际上使用ordinal
)。
编辑:在阅读Enum.hashCode背后的原因之后 ,我注意到hashCode
和equals
的实现实际上是Object
。 但这是合理的,因为枚举值的不稳定性。
如果您无法创建枚举值的新实例,则使用这些默认值没有问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.