好的,我理解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 :(
}
Run Code Online (Sandbox Code Playgroud)
现在我想把这个类作为我的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()
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这改变你Set从Set<WannaBeKey>到Set<WannaBeKeyWrapper>,但你应该能够考虑到这一点.
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |