-1

こんにちは、特定のオブジェクトを識別するために必要な 3 つの属性 (文字列) があります。

より良い解決策は何ですか:

ピエールヨアヒム・ザウアーが投稿したキー オブジェクトを次のように使用します。

public class MyKey{

private String one;
private String two;
private String three;

public MyKey(Sting one,String two, String three){
    this.one=one;
    this.two=two;
    this.three=three;
}

//getter only

@Override
public int hashcode(){
// creating Hashcode
}

@Override
public boolean equals(Object o){
// comparing
}
}

=>Map<MyKey, Object>

またはマップ内のマップ内でマップを使用する:

=>Map<String, Map<String, Map<String, Object>>>

4

5 に答える 5

2

最初のオプションを使用する必要があると思います。その理由は、よりクリーンで柔軟だからです。数か月後、キーに要素を追加する必要があると想像してください。構造が複雑になることは言うまでもなく、もう 1 レベルのネストが必要になるため、構造は無効になります。

于 2013-02-14T09:20:17.800 に答える
1

あなたが指定したキークラスを使用します。はるかに明確で、キーに名前を付けることができるという利点があります。

于 2013-02-14T09:19:27.243 に答える
0

等しいを実装するだけ

one.equals(o) || two.equals(o) || three.equals(o)

とハッシュコード

one.hashCode() ^ two.hashCode() ^ three.hashCode()
于 2013-02-14T09:22:47.993 に答える
0

あなたが言った

特定のオブジェクトを識別するために必要な 3 つの属性 (文字列) があります。

これは、キーが 3 つの文字列で構成されていること、および最初のソリューションが正しく直感的であることをすぐに示しています。

于 2013-02-14T09:19:38.850 に答える
0

常に 3 つのキーが必要な場合は、パフォーマンス上の理由からキー オブジェクト (tuple-3) を使用する必要があります。それらすべてを支配する1つのオブジェクト...また、より良い同時実行性が必要な場合は、各キーフィールドを最終的にします(ハッシュを事前に計算することもできます...)

于 2013-02-14T09:19:41.367 に答える