2011-08-10 171 views
2

好吧,所以我目前正在尋找一種搜索方法,搜索的術語是通過數據庫運行的,並且匹配的產品被添加到一個帶有2個Integer字段的hashMap中。迭代通過HashMap

然後HashMap中作出後,將被顯示的項目,但我遇到麻煩HashMap中打印出來的細節

這裏是我的代碼

public HashMap<Integer, Integer> bankSearch = new HashMap<Integer, Integer>(); 

和使用

Iterator it = bankSearch.entrySet().iterator(); 
    while (it.hasNext()) { 
     HashMap.Entry pairs = (HashMap.Entry)it.next(); 
     System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
     if (bankItemsN[i] > 254) { 
      outStream.writeByte(255); 
      outStream.writeDWord_v2(pairs.getValue()); 
     } else { 
      outStream.writeByte(pairs.getValue()); // amount 
     } 
     if (bankItemsN[i] < 1) { 
      bankItems[i] = 0; 
     } 
     outStream.writeWordBigEndianA(pairs.getKey()); // itemID 
    } 

電流誤差

.\src\client.java:75: cannot find symbol 
symbol : class Iterator 
location: class client 
       Iterator it = bankSearch.entrySet().iterator(); 
       ^
.\src\client.java:77: java.util.HashMap.Entry is not public in java.util.HashMap 
; cannot be accessed from outside package 
         HashMap.Entry pairs = (HashMap.Entry)it.next(); 
          ^
.\src\client.java:77: java.util.HashMap.Entry is not public in java.util.HashMap 
; cannot be accessed from outside package 
         HashMap.Entry pairs = (HashMap.Entry)it.next(); 
                ^
3 errors 
Press any key to continue . . . 
+1

什麼Java編譯器是您使用?另外,是否有一個特別的原因,你不使用Java泛型? – templatetypedef

回答

8

你所得到的錯誤是由於:

  • 您沒有導入java.util.Iterator

  • HashMap.Entry是一個私人的內部類。您應該使用Map.Entry

你也應作爲templatetypedef說,使用迭代器通用版,或使用for-each結構。

附錄

下面是一些實際的代碼,展示了這兩種方法:

import java.util.Map; 
import java.util.HashMap; 
import java.util.Iterator; 

public class MapExample { 
    public static void main(String[] args) { 
     Map<String, Integer> m = new HashMap<String, Integer>(); 
     m.put("One", 1); 
     m.put("Two", 2); 
     m.put("Three", 3); 

     // Using a for-each 
     for (Map.Entry<String, Integer> e: m.entrySet()) { 
      System.out.println(e.getKey() + " => " + e.getValue()); 
     } 

     // Using an iterator 
     Iterator<Map.Entry<String, Integer>> it = m.entrySet().iterator(); 
     while (it.hasNext()) { 
      Map.Entry e = (Map.Entry<String, Integer>)it.next(); 
      System.out.println(e.getKey() + " => " + e.getValue()); 
     } 
    } 
} 
+0

迭代器的通用版本是什麼? 也, 包映射不存在 Map.Entry對=(Map.Entry)it.next(); – Travis

+0

@Travis我在我的答案中添加了代碼,顯示了兩種方法。 HTH。 –