2013-06-21 78 views
3

有一個HashMap讀的HashMap <字符串,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),爲兩個獨立的變量?

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

使用相同的密鑰不能有兩個條目。第一個將被覆蓋。 – GMZ

+0

@GMZ我相信條目是存儲在「M」鍵下的地圖。 – Pshemo

+0

在這個例子中,一個名爲** aircraftHandling **的HashMap和三個條目將只有兩個條目,因爲第一個(HashMap <「M」,HashMap <1.22, 200>>();)將被第二個(HashMap <「M 「,HashMap <5.62, 300>>();)。這就是我解決這個問題的方法。 – GMZ

回答

2

這是你如何通過迭代一個鍵集提取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>>(); 

但是,如果它是這樣,這是不可能的。 A Map可以爲單個密鑰提供單個值!這意味着,如果您爲某個鍵"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);  
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(); 
} 
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(); 
} 
2

首先,馬先生p不能有重複的密鑰。如果你插入重複密鑰,那麼以前的密鑰將消失。可以使用以下代碼來分離鍵和值:

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

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

     doubleValue = entry.getKey(); 
     integerValue =entry.getValue(); 
    } 
2

與foreach循環和方法HashMap.entrySet()

HashMap<Double, Integer> map=... 
for(Entry<Double,Integer> entry : map.entrySet()){ 
    Double d = entry.getKey(); 
    Integer i = entry.getValue(); 
} 
3

可以使用用於環路增強只是爲了讀出元件:

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>。我這樣做以下列方式:

不考慮所使用的語法,因爲關鍵是String,您嘗試put()使用已經存在一個String關鍵在Map值在Map新的第二次值將覆蓋舊值。

1

你不能有2個值的關鍵M.我希望你已經照顧了,而把值。你應該把一個HashMap中的值M.

你只需要獲取HashMap的對應鍵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(); 
} 

編輯 - 從我的手機回答,所以錯過了一些細節。現在添加它們。

相關問題