11

float型の2つのキーを受け取り、Integer型の値を提供するネストされたHashMapを作成したいと思います。

 public static HashMap<Float, HashMap<Float, Integer>> hashX = new HashMap<Float,HashMap<Float, Integer>>();

通常のHashMapのように値を配置/取得する簡単な方法はありますか?

  hashX.put(key, value);
  hashX.get(key);

それとも、使用しなければならないより複雑な方法ですか?私は解決策をウェブで検索しましたが、自分に当てはまる解決策を見つけるのは難しいと感じています。どんな助けでもいただければ幸いです!

4

7 に答える 7

12
Map<Float, Map<Float, Integer>> map = new HashMap<>();

map.put(.0F, new HashMap(){{put(.0F,0);}});
map.put(.1F, new HashMap(){{put(.1F,1);}});

map.get(.0F).get(.0F);
于 2013-01-29T12:35:58.500 に答える
5

あなたは外側の地図からネストされた地図に行かなければなりません、そしてそれget()を呼び出すことができますput()get()

float x = 1.0F;
HashMap<Float, Integer> innerMap = hashX.get(x);
if (innerMap == null) {
    hashX.put(x, innerMap = new HashMap<>()); // Java version >= 1.7
}
innerMap.put(2.0F, 5);
于 2013-01-29T12:15:54.583 に答える
2

次のようなメソッドでラッパー クラスを作成できます。

public class MyWrapper {
    private Map<Float, Map<Float, Integer>> hashX;
    // ...
    public void doublePut(Float one, Float two, Integer value) {
        if (hashX.get(one) == null) {
            hashX.put(one, new HashMap<Float, Integer>());
        }
      hashX.get(one).put(two, value);
    }
}

フィールドを宣言するときは、具体的な実装ではなくインターフェイスを使用する必要があることに注意してください。たとえば、必要に応じてリファクタリングHashMapしやすくなります。ConcurrentHashMap

于 2013-01-29T12:19:32.230 に答える
1

次のように実行できます。

HashMap<Float, Integer> h1 = new HashMap<Float, Integer>();
h1.put(1.0f,new Integer(1));
HashMap<Float, Integer> h2 = new HashMap<Float, Integer>();
h2.put(3.0f,new Integer(3));

hashX.put(1.0f, h1);
hashX.put(1.0f, h1);
于 2013-01-29T12:16:41.213 に答える
0

float型の2つのキーを受け取り、Integer型の値を提供するネストされたHashMapを作成したいと思います。

そのためにネストされたマップは必要ありません。複合キーを使用してルックアップする場合は、マップをそのように宣言することをお勧めします。PairJFKには良いクラスはありませんが、を使用することができますMap.Entry。これは、使用するのに多少不便ですが、機能します。

Map<Map<Float, Float>, Integer> map = new ....

インスタンスの作成については、 https://stackoverflow.com/a/3110563/18573を参照してくださいMap.Entry

于 2013-01-29T15:33:54.717 に答える