2010-12-16 7 views
4
に私はHashMapを使用してみましたが、それはこのデータだけの最後の出現にマップするでしょう。このデータに

は、Java

  1   35 
      1   30 
      1   20 
      2   10 
      3   40 
      3   25 
      3   15 

をマッピングに問題が発生します

を、このデータをマッピングする手助けが必要です。

答えて

8

あなたが記述するMapおよびHashMapの振る舞いは、他のコメント作成者が注意しているとおりです。あなたが望むのはマルチマップです。あなたは自分自身をロールすることができます(これをしないでください - 他のコメント作成者がリストをマップに提案しますが、それはすぐに面倒になります)自分自身を本当にロールしたい場合は、リスト/ )またはGuavamultimapを使用してください。例:

import com.google.common.collect.HashMultimap; 
import com.google.common.collect.SetMultimap; 

    public static void main(String[] args) 
    { 
    final SetMultimap<Integer, Integer> foo = HashMultimap.create(); 
    foo.put(1,35); 
    foo.put( 1,30); 
    foo.put( 1,20); 
    foo.put( 2,10); 
    foo.put( 3,40); 
    foo.put( 3,25); 
    foo.put( 3,15); 
    System.out.println(foo); 
    } 

出力:

{1 = [35、20、30]、2 = [10]、3 = [25、40、 15]}

値にアクセスするには、何をしたいかによっていくつかの方法があります。 get(Integer key)を呼び出すと、値のコレクションが返されます。

また、Guavaの多くの関連性を挙げているthis answerをチェックしてください。

6

The documentation states

パブリックインターフェイス地図
キーを値にマッピングするオブジェクト。 マップに重複キーを含めることはできません。 各キーは最大で1つの値にマップできます。

代わりに、各キーに数字のリストを関連付けることができます。

4

この問題を解決するには、Map<Long, List<Long>>(またはあなたの持つタイプ)を使用できます。

2

Mapは、キーの値が1つだけです。 Guava/Google CollectionsMultimapインターフェイスを使用して、キーの複数の値を格納することができます。

0

それとも

一覧<ペア<整数をペア< F、S>クラスを作成し、リストに入れ、整数>>