热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我们是否必须为放在hashmap中的枚举重写equals/hashcode

如何解决《我们是否必须为放在hashmap中的枚举重写equals/hashcode》经验,为你挑选了1个好方法。

我有一个枚举类如下.

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和枚举等于Iteminventory.put()inventory.get()正常工作?如果没有,为什么?



1> Andy Turner..:

不,你没有.为什么?因为已经提供了这些方法的合理实现.

即使你想,也不能,因为这些方法都final在枚举中.

但是,也不要使用HashMap枚举键类型:use EnumMap,它专门用于枚举键,并且不使用hashCodeequals(它实际上使用ordinal).


编辑:阅读之后Enum.hashCode背后的原因是什么,我注意到的实现hashCodeequals实际上是来自Object.但这些合理的,因为枚举值不具有实例性.

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

枚举值必须与自身具有相同的哈希码值(并且该值无关紧要);

枚举值必须等于自身,而不是任何其他值,即通过身份相等.


推荐阅读
author-avatar
年轻的蒲山公_777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有