2016-03-18 22 views
0

特定のNamespaceに適用されるPolicyオブジェクトのJavaで実装を作成しました。複数値のキーを使用したマップですか?

私は簡単に地図上.containsKey().get()を呼び出すことによって、特定の名前空間のポリシーを取得することができますので、彼らはMap<Namespace,List<Policy>>構造に格納されています。このため、私はJVMの規則に従ってequals()hashCode()をオーバーライドしました。うまくいった。

要件が変更されていて、Namespaceは、等価ルールが「値の1つが一致する必要があります」の値リストから突然構成されています。つまり、Namespace Aに格納されている値の1つがNamespace Bに格納されている値のいずれかと一致する場合、それらは等しいです。

hashCode()を明らかに上書きすることは、どの値のコードを表現するかわからないため、明らかに無効になります。

デザインを新しい平等ルールに最もよく適応させるにはどうすればよいですか?私はまだMapを使用するか、私の場合に合ったパターンがありますか?

答えて

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 
    } 
} 
+0

正確です。しかし、 'HashMap'は私のキーで' hashCode() 'メソッドを呼び出します - すべてのキーが* 1 *を呼び出しに返すとどうなりますか?それはJVMのルールと違うのですか? – mvreijn

関連する問題