2012-12-22 103 views
4

我希望在Processing中使用HashMap,我希望使用迭代器來遍歷HashMap中的所有條目。但是,當我希望使用迭代器時,我被告知「無法找到名爲Iterator的類或類型」。部分代碼如下所示。Processing是否支持迭代器?

Iterator i = nodeTable.entrySet().iterator(); // Get an iterator 
while (i.hasNext()) 
{ 
    Node nodeDisplay = (Node)i.next(); 
    nodeDisplay.drawSelf(); 
} 

從處理網站http://processing.org/reference/HashMap.html我知道迭代器可以用於遍歷HashMap中。不過,我找不到更多關於迭代器的信息。我想知道是否在處理中支持迭代器?或者我應該導入一些庫,以便能夠使用它們?

+2

你是否'import java.util.Iterator;'? –

+1

此外,使用泛型使您的代碼類型安全。 –

+0

謝謝!我沒有導入它。我只是試圖導入java.util.Iterator,但我被告知i.next()不能轉換爲類節點,它是一個自定義的類。 @ A - C – Timothy

回答

1

很高興你解決了你的問題,但對於其他人來說,如果你想迭代entrySet(),有兩種方法。這樣做的第一種方式:

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Map.Entry; 

public class Testing { 

    public static void main(String[] args) { 
     Map<String, String> strMap = new HashMap<String, String>(); 
     strMap.put("foo", "bar"); 
     strMap.put("alpha", "beta"); 
     for (Iterator<Entry<String, String>> iter = strMap.entrySet().iterator(); iter.hasNext();) 
     { 
      Entry<String, String> entry = iter.next(); 
      System.out.println(entry.getKey() + "=" + entry.getValue()); 
     } 
    } 
} 

注意的進口在代碼的頂部,你可能錯過了一個爲Iterator

而第二個:

import java.util.HashMap; 
import java.util.Map; 
import java.util.Map.Entry; 

public class Testing { 

    public static void main(String[] args) { 
     Map<String, String> strMap = new HashMap<String, String>(); 
     strMap.put("foo", "bar"); 
     strMap.put("alpha", "beta"); 
     for (Entry<String, String> entry : strMap.entrySet()) 
      System.out.println(entry.getKey() + "=" + entry.getValue()); 
    } 
} 

這就是所謂的for-each loop,並且消除了需要使用Iterator所有和使代碼更簡單。請注意,這也可以在陣列中使用,以消除對索引的需要:只要我有問題解決了

String[] strs = {"foo", "bar"}; 
for (String str : strs) 
    System.out.println(str); 
+0

非常感謝您的熱心幫助。 – Timothy

2

,我會把我的部分代碼在這裏情況下,其他人可能遇到此。再次感謝您的親切幫助。

import java.util.Iterator; // Import the class of Iterator 
// Class definition and the setup() function are omitted for simplicity 

// The iterator is used here 
HashMap<String, Node> nodeTable = new HashMap<String, Node>(); 
void draw(){ 
    // Part of this function is omitted 
    Iterator<Node> i = nodeTable.values().iterator(); 
    // Here I use the iterator to get the nodes stored the hashtable and I use the function values() here. entrySet() or keySet() can also be used when necessary 
    while (i.hasNext()) { 
     Node nodeDisplay = (Node)i.next(); 
     // Now you can use the node from the hashmap 
    } 
}