使用keyset / entryset迭代hashmap

时间:2013-10-16 03:53:52

标签: java iterator hashmap

我正在尝试访问我在hashmap中放入的内容,但它无效。 显然,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");

1 个答案:

答案 0 :(得分: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");