【问题标题】:Iterating through a HashMap遍历 HashMap
【发布时间】:2011-10-23 20:45:24
【问题描述】:

好的,所以我目前正在研究一种搜索方法,搜索的术语在数据库中运行,匹配的产品被添加到具有 2 个整数字段的 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 . . .

【问题讨论】:

  • 您使用的是什么 Java 编译器?另外,您不使用 Java 泛型是否有特殊原因?

标签: search iterator hashmap loops


【解决方案1】:

您遇到的错误是由于:

  • 您没有导入java.util.Iterator

  • HashMap.Entry 是私有内部类。你应该使用Map.Entry

此外,正如 templatetypedef 所说,您应该使用 Iterator 的通用版本,或者使用 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());
        }
    }
}

【讨论】:

  • 迭代器的通用版本是什么?另外,包 Map 不存在 Map.Entry pairs = (Map.Entry)it.next();
  • @Travis 我在答案中添加了代码,显示了这两种方法。 HTH。
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2022-01-16
  • 2015-02-13
  • 2015-10-26
  • 2013-10-26
相关资源
最近更新 更多