作者:年轻的蒲山公_777 | 来源:互联网 | 2023-01-21 11:12
我有一个枚举类如下.
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- inventory = new HashMap
- ();
我是否需要重写了hashCode和枚举等于Item
类inventory.put()
和inventory.get()
正常工作?如果没有,为什么?
1> Andy Turner..:
不,你没有.为什么?因为已经提供了这些方法的合理实现.
即使你想,也不能,因为这些方法都final
在枚举中.
但是,也不要使用HashMap
枚举键类型:use EnumMap
,它专门用于枚举键,并且不使用hashCode
或equals
(它实际上使用ordinal
).
编辑:阅读之后Enum.hashCode背后的原因是什么,我注意到的实现hashCode
和equals
实际上是来自Object
.但这些是合理的,因为枚举值不具有实例性.
如果您无法创建枚举值的新实例,则使用这些默认值没有问题:
枚举值必须与自身具有相同的哈希码值(并且该值无关紧要);
枚举值必须等于自身,而不是任何其他值,即通过身份相等.