使用多值键映射?

时间:2016-03-18 23:15:00

标签: java optimization

我用Java创建了一个适用于特定Policy的{​​{1}}个对象的实现。

它们存储在Namespace结构中,因此我可以通过调用Map上的Map<Namespace,List<Policy>>.containsKey()轻松检索特定命名空间的策略。为此,我根据JVM规则覆盖了.get()equals()。工作得很好。

现在需求正在发生变化,hashCode()突然由一个值列表组成,其中等式规则是“其中一个值必须匹配”。换句话说,如果Namespace中存储的某个值与Namespace A中存储的值之一匹配,那么它们就是“相等”。

显然覆盖Namespace B不再起作用,因为我不知道代表哪个值的代码。

如何才能使我的设计最适合新的平等规则?我还应该使用hashCode()还是有适合我案例的模式?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果我正确理解了这些要求,你需要这样的东西:

class Key {
    Set values;

    @Override
    public int hashCode() {
        return 1;
    }

    @Override
    public boolean equals(Object key2) {
        // Returns true if one of the values of this key matches one of the values of key2
    }
}
相关问题