3

がありますHashMap

HashMap aircraftHandling = new HashMap<String, HashMap<Double, Integer>>();

これHashMapには次のエントリが含まれます。

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();
HashMap<"L", HashMap<10.11, 900>>();

キー「M」、つまりHashMap<1.22, 200>とのエントリを取得する必要がありますHashMap<5.62, 300>。私は次の方法でこれを行います:

HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

問題は、DoubleInteger、つまり (1.22, 200) と (5.62, 300) を 2 つの別々の変数に変換する方法です。

for (int i=0; i<lines.size(); i++)
{
  //doubleValue = [i]???
  //integerValue = [i]???
}
4

7 に答える 7

3

要素を読み取るためだけに拡張 for ループを使用できます。

for (Map.Entry<Double, Integer> entry : lines.entrySet()) {
   Double key = entry.getKey();
   Integer value = entry.getValue();
}

この HashMap には、次のエントリが含まれています。

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();
HashMap<"L", HashMap<10.11, 900>>();

キー「M」のエントリ、つまり HashMap<1.22, 200> と HashMap<5.62, 300> を取得する必要があります。私は次の方法でこれを行います:

キーは であるため、構文 used を考慮しなくても、新しい値に既に存在するキーを使用しての値Stringを 2 回試行すると、古い値が上書きされます。put()MapStringMap

于 2013-06-21T08:32:05.013 に答える
2

これは、 keyset を反復処理して のキーと値のペアを抽出する方法です。HashMap

Iterator<Double> it= lines.keySet().iterator();
while (it.hasNext()) {
    Double key= it.next();
    Integer value= lines.get(key);
}

余談ですが、これがエラーなのか、データの表現が悪いだけなのかはわかりません。

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();

でも、このままだと無理ですよね。Mapは、1 つのキーに対して 1 つの値を持つことができます。つまり、あるキーに何らかの値を入力し"M"て、同じキーに対して再度実行すると、前の値が上書きされます。あなたがすべきことは次のとおりです。

//get the inner map for "M"
HashMap<Double, Integer> innerMap= aircraftHandling.get("M");
if (innerMap == null) {
    //if it does not exist instantiate it
    innerMap= new HashMap<Double, Integer>();
    aircraftHandling.put("M", innerMap);
}

そして今、innerMapあなたは他の値を追加します、例えば:

innerMap.put(1.22, 200);
innerMap.put(5.62, 300);    
于 2013-06-21T08:27:16.043 に答える
2

たぶんこの方法を試してください

Map<Double, Integer> lines = (HashMap<Double, Integer>) aircraftHandling.get("M");
// ^add this generic types here so you wont have to cast them later with getters
for (Map.Entry<Double, Integer> entry:lines.entrySet()){
    Double key = entry.getKey();
    Integer value = entry.getValue();
}
于 2013-06-21T08:30:30.300 に答える
2

ここにあります:

HashMap<String, HashMap<Double, Integer>> aircraftHandling = new HashMap<String,    HashMap<Double, Integer>>();

HashMap<Double, Integer> subMap1 = new HashMap<Double, Integer>();
subMap1.put(1.22, 200);

HashMap<Double, Integer> subMap2 = new HashMap<Double, Integer>();
subMap1.put(5.62, 300);

aircraftHandling.put("M", subMap1);
aircraftHandling.put("L", subMap2);

HashMap<Double, Integer> lines = aircraftHandling.get("M");

for (Entry<Double, Integer> set : lines.entrySet()) {
    Double doubleValue = set.getKey();
    Integer integerValue = set.getValue();
}
于 2013-06-21T08:31:22.497 に答える
2

まず、Map は重複キーを持つことはできません。重複したキーを挿入すると、前のキーは消えます。次のコードを使用して、キーと値を分離できます。

     HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

     for(Map.Entry<Double, Integer> entry: lines ){

        doubleValue = entry.getKey();
        integerValue =entry.getValue();
     }
于 2013-06-21T08:31:29.010 に答える
2

foreach ループとメソッドを使用HashMap.entrySet():

HashMap<Double, Integer> map=...
for(Entry<Double,Integer> entry : map.entrySet()){
   Double d = entry.getKey();
   Integer i = entry.getValue();
}
于 2013-06-21T08:31:29.897 に答える
1

キー M に 2 つの値を指定することはできません。値 M に対して 1 つのハッシュマップを配置する必要があります。

キー M に対応するハッシュマップを取得するだけです。

HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

そして、このマップ内のすべてのエントリを反復処理します

Iterator it = lines.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    double d = pairs.getKey().doubleValue();
    int i = pairs.getValue().intValue();
}

編集 - 私の携帯電話から返信したので、いくつかの詳細を見逃していました。それらを今すぐ追加します。

于 2013-06-21T08:34:11.117 に答える