2011-03-27 102 views
1

我有兩個HashMap的的Java的LinkedHashMap迭代

LinkedHashMap<String, int[]> val1 = new LinkedHashMap<String, int[]>(); 
LinkedHashMap<String, int> val2 = new LinkedHashMap<String, int>(); 

每個HashMap具有不同的密鑰和值。我試圖在同一時間迭代兩個散列圖 並將每個值乘以val1->int[] to val2->int

最簡單和禁食的方法是什麼?我在這兩個hashmap中都有數千個值。

謝謝

+2

嗯,如果他們有不同的鍵,那麼在同一時間迭代它們意味着什麼?說val1有鍵「a」和「b」,而val2有鍵「X」和「Y」。這是否意味着你想要處理所有四種組合(aX,aY,bX,bY),或者什麼? – 2011-03-27 04:22:19

+1

具有預期輸出的val1和val2版本的示例將很有幫助。 – 2011-03-27 04:24:26

+0

LinkedHashMap具有迭代排序,因此,如果他從頭到尾進行迭代,則只有一種方法是他/她可以完成的。 – 2011-03-27 04:29:16

回答

1

你可能做錯了......

首先,一個HashMap不能存儲整數,它需要合適的對象 - 如Integer –數組是一個對象,儘管它隱藏在一些語法糖後面。

下面是如何循環兩個地圖,如果他們碰巧有相同的大小, 這是我認爲你的意思。

Iterator<int[]> expenses = val1.values().iterator(); 
    Iterator<Integer> people = val2.values().iterator(); 

    assert val1.size() == val2.size() : " size mismatch"; 
    while (expenses.hasNext()) { 
     int[] expensesPerMonth = expenses.next(); 
     int persons = people.next(); 

     // do strange calculation 
     int strangeSum = 0; 
     for (int idx = 0; idx < expensesPerMonth.length; idx++) { 
      strangeSum += persons * expensesPerMonth[idx]; 
     } 
     System.out.println("strange sum :" + strangeSum); 
    } 

但你或許應該回去重新考慮如何存儲你的數據– 爲什麼您使用的地圖,和最新的關鍵?

例如,創建一個代表每月費用和人數組合的對象會不會更好?

+0

謝謝,我知道這是錯誤的邏輯,但我不是主要的開發人員,我只是維護。 – Tweet 2011-03-27 14:52:02

0

AFAIK,LinkedHashMap有迭代排序。所以,這樣的事情可能工作:

Iterator myIt1 = val1.entrySet().iterator(); 
Iterator myIt2 = val2.entrySet().iterator(); 

while(val1.hasNext() && val2.hasNext()) { 
    int myarray[] = val1.next(); 
    for(int i = 0; i<myarray.length; i++) { 
     myarray[i] = myarray[i] * val2.next(); 
    } 
} 
+0

,但它給出的錯誤方法next()未定義爲類型LinkedHashMap Tweet 2011-03-27 04:38:44

+0

您正在推進iterator2太頻繁。 (至少根據我對問題的解釋) – I82Much 2011-03-27 04:38:48

+1

你能再次檢查你的代碼嗎?它有幾個錯誤:( – Tweet 2011-03-27 04:50:35