【问题标题】:Iterating hashmap, using keyset/entryset使用 keyset/entryset 迭代 hashmap
【发布时间】:2013-10-16 03:53:51
【问题描述】:

我正在尝试访问我放入哈希图中的内容,但它不起作用。 显然 hashmap 的迭代器没有任何东西。它不能做一个mapIter.hasNext(),它会是假的。

代码如下:

    Iterator<Product> cIter = getCartContent(cart).iterator();
    HashMap<Product, Integer> hash = new HashMap<Product, Integer>();
    Iterator<Product> mIter = hash.keySet().iterator();

    Product p;

    while(cIter.hasNext()) {
        p = cIter.next();

        if(hash.containsKey(p))
            hash.put(p, hash.get(p) + 1);
        else
            hash.put(p, 1);

    }

    if(!mIter.hasNext())
        System.out.println("Empty mIter");

【问题讨论】:

  • 然后向我们展示更大的图景。向我们证明其中有元素。发布 SSCCE。
  • 使用 hashmap.isEmpty() 返回 false。抱歉,我是新手。。
  • 您的代码中有大量变量,您没有向我们展示它们是如何创建的,也没有评论来解释它们。例如,getCartContent 是什么?你确定问题不在那个方法上吗?

标签: java iterator hashmap


【解决方案1】:

当你打电话时

HashMap<Product, Integer> hashmap = new HashMap<Product, Integer>();
Iterator<Product> mapIter = hashmap.keySet().iterator();

创建的Iterator 有一个空HashMap 的视图,因为您还没有向其中添加任何内容。当你调用hasNext() 时,即使HashMap 本身包含元素,Iterator 的视图也看不到它。

当你绝对需要它时创建Iterator,而不是之前,即。在您在代码中调用 hasNext() 之前。

Iterator<Product> mapIter = hashmap.keySet().iterator();

if(!mapIter.hasNext())
    System.out.println("Empty mapIter");

【讨论】:

  • 哦,你打败了我!
  • 面部护理。非常感谢!
  • @Codebox 不客气。它不一定是面相。一些Iterator 的实现可能会有所不同。
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 2012-09-20
  • 2015-12-23
  • 1970-01-01
  • 2013-10-30
  • 2021-10-10
  • 2010-12-25
相关资源
最近更新 更多