java – 如何将第三方类对象用作Hashmap键?
发布时间:2020-12-15 00:10:44 所属栏目:Java 来源:网络整理
导读:好的,我理解equals和hashcode的工作原理以及它们在hashmap中的使用方式. 但是这个问题在我脑海中浮现,如果我有一个没有覆盖哈希码和等号的第三方对象,我甚至不允许修改它. 考虑以下课程: //Unmodifiable classpublic final class WannaBeKey{ private Strin
好的,我理解equals和hashcode的工作原理以及它们在hashmap中的使用方式.
但是这个问题在我脑海中浮现,如果我有一个没有覆盖哈希码和等号的第三方对象,我甚至不允许修改它. 考虑以下课程: //Unmodifiable class public final class WannaBeKey{ private String id; private String keyName; //Can be many more fields public String getId() { return id; } public String getKeyName() { return id; } //no hashcode or equals :( } 现在我想把这个类作为我的Hashmap键,显然它不会没有equals和hashcode.我想知道有没有办法处理这种情况?我无法想到任何我想到的事情. 谢谢. 解决方法
我之前遇到过这种情况,并通过为WannaBeKey创建一个包装器来解决这个问题:
public class WannaBeKeyWrapper { private final WannaBeKey key; public WannaBeKeyWrapper(WannaBeKey key) { this.key = key; } public boolean equals(Object obj) { // Insert equality based on WannaBeKey } public int hashCode() { // Insert custom hashcode in accordance with http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode() } } 显然这会改变你的Set来自Set< WannaBeKey>设置< WannaBeKeyWrapper>,但你应该能够解释它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |