use*_*988 2 java hashmap key-value unique-key
我想存储绑定到名称+数字的值.喜欢,(John,1)(RED)和(John,2)(BLUE)和(Elize,1)(GREEN)那么我如何存储两个组合独特的键?
创建一个表示复合键的新类型(此处为名称和数字).你需要覆盖hashCode()
和equals()
,我强烈建议你使类型不可变.例如:
public final class NameIntPair {
private final int intValue;
private final String name;
public NameIntPair(int intValue, String name) {
this.intValue = intValue;
this.name = name;
}
@Override
public int hashCode() {
int hash = 17;
hash = hash * 31 + intValue;
hash = hash * 31 + (name == null ? 0 : name.hashCode());
return hash;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof NameIntPair)) {
return false;
}
if (this == obj) {
return true;
}
NameIntPair other = (NameIntPair) obj;
return other.intValue == intValue && Objects.equal(other.name, name);
}
}
Run Code Online (Sandbox Code Playgroud)
我在Objects.equal
Guava中使用以方便避免显式无效检查 - 如果你不使用Guava,你必须在代码中使用等效或处理nullity.或者,您可能希望阻止空名称,在构造函数中验证它.
归档时间: |
|
查看次数: |
1876 次 |
最近记录: |