Howto Store 2在HashMap中组合了唯一键?

use*_*988 2 java hashmap key-value unique-key

我想存储绑定到名称+数字的值.喜欢,(John,1)(RED)和(John,2)(BLUE)和(Elize,1)(GREEN)那么我如何存储两个组合独特的键?

Jon*_*eet 5

创建一个表示复合键的新类型(此处为名称和数字).你需要覆盖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.equalGuava中使用以方便避免显式无效检查 - 如果你不使用Guava,你必须在代码中使用等效或处理nullity.或者,您可能希望阻止空名称,在构造函数中验证它.