好的,我理解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>,但你应该能够解释它.
原文地址:https://www.jb51.cc/java/126632.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。