2013-10-16 73 views
0

我試圖訪問我放入hashmap中的東西,但它不起作用。 顯然hashmap的迭代器沒有任何東西。它不能做一個mapIter.hasNext(),它會是假的。使用鍵集/入口集迭代hashmap

下面的代碼:

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"); 
+3

然後向我們展示大圖。向我們證明其中有元素。發佈SSCCE。 –

+0

使用hashmap.isEmpty()返回false。對不起,我是新來的.. – Codebox

+1

你的代碼中有很多變量你沒有顯示我們正在創建,也沒有評論來解釋它們。例如,什麼是'getCartContent'?你確定問題不在於這種方法嗎? – Marconius

回答

1

當你調用

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

所創建具有空HashMap的視圖Iterator,因爲你還沒有添加任何東西給它。當您撥打hasNext()時,即使HashMap本身包含元素,Iterator的視圖也不會看到它。

創建Iterator當你絕對需要它,而不是之前,即。在你的代碼中調用hasNext()之前。

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

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

哦,你打敗了我! –

+0

Facepalm。非常感謝! – Codebox

+0

@Codebox不客氣。這不一定是facepalm。一些'Iterator'實現可能會有所不同。 –