好的,我理解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>,但你应该能够解释它.