gpt4 book ai didi

java - 我们是否必须为放在 HashMap 中的枚举覆盖 equals/hashcode

转载 作者:行者123 更新时间:2023-11-29 06:51:45 26 4
gpt4 key购买 nike

我有一个枚举类如下。

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;
}
}

和一个hashmap定义如下

private Map<Item, Integer> inventory = new HashMap<Item, Integer>();

我是否需要覆盖 inventory.put()inventory.get() 的枚举 Item 类中的 hashcode 和 equals 以好好工作?如果不是,为什么?

最佳答案

不,你不知道。为什么?因为已经提供了这些方法的合理实现。

即使你想,你也做不到,因为这些方法在枚举中是final

但是,不要将 HashMap 与枚举键类型一起使用:使用 EnumMap,它专门用于枚举键,并且不使用 hashCode equals(它实际上使用 ordinal)。


编辑:阅读后What is the reason behind Enum.hashCode ,我注意到 hashCodeequals 的实现实际上是来自 Object 的实现。但这些合理的,因为枚举值的不可实例化。

如果您不能创建枚举值的新实例,使用这些默认值没有问题:

  • 枚举值必须具有与其自身相同的哈希码值(该值是什么无关紧要);
  • 枚举值必须等于其自身,而不是任何其他值,即身份相等。

关于java - 我们是否必须为放在 HashMap 中的枚举覆盖 equals/hashcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com