2011-08-10 175 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。 –