2016-03-31 12 views
1

Java HashMap内の1つのキーに、異なるデータ型の2つの値を1つのlong型ともう1つのstring型に関連付けようとしています。 私は周りを見渡して、Apache Collections FrameworkのMultiValuedMapを使用するか、GuavaのMultiMapを使用して同様の問題を提案します。しかし、私はこれらが過度なことかもしれないと思っています。私はシステムに余分なバイナリを追加したくありません。java HashMap内の単一のキーに2つの値を関連付ける

のようなクラスを定義するに何か問題があります:HashMapのに挿入しながら

class X { 
    long value1; 
    String value2; 
    X(long v, String w) { this.value1 = v; this.value2 = w;} 
} 

は、次の操作を行います。

X obj = new X(1000, "abc"); 
map.add("key", obj) 

は、このアプローチで任意の明白な欠点はありますか?私はルックアップでうまくスケールされたソリューションを探しています。

ありがとうございます!

+0

なぜ同じにしたいですか?あなたは説明することができますusecase – Panther

+0

オブジェクトの作成に問題はありません。また、そのキーの値としてマップすることもできます。キーとしてのデータ型と値としての実際の値。 – Panther

+0

'map.put(" key "、obj)'。 –

答えて

2

あなたのアプローチに間違いはありません。 Javaはタプルクラスを欠いとして、あなたは(代わりにあなたのクラスXの)一般的に独自に定義することができます。

public class Tuple<X, Y> { 
    public final X x; 
    public final Y y; 
    public Tuple(X x, Y y) { 
    this.x = x; 
    this.y = y; 
    } 
} 

は、次のように使用量は次のようになりUsing Pairs or 2-tuples in Java

も参照してください。

Map<String,Tuple<Long,String>> map = new HashMap<>(); 
    Tuple<Long,String> obj = new Tuple<>(1000L, "abc"); 
    map.put("key", obj); 
0

それはまあまあです。任意のオブジェクトを値としてMapに格納することができます。この場合、独自のクラスを使用して2つの個別値をラップするだけです。

カスタムクラスをキーとして使用しない限り、すでに完了しています。

+0

ありがとう!感謝します! – z00lander

関連する問題