4

Processing でハッシュマップを使用したいと考えており、イテレータを使用してハッシュマップ内のすべてのエントリをトラバースしたいと考えています。しかし、イテレータを使おうとすると、「イテレータという名前のクラスまたは型が見つかりません」と言われます。コードの一部を以下に示します。

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

処理 Web サイトhttp://processing.org/reference/HashMap.htmlから、イテレータを使用してハッシュマップをトラバースできることを知っています。ただし、イテレータに関する詳細情報は見つかりません。イテレータが処理でサポートされているかどうか疑問に思っていますか? または、いくつかのライブラリをインポートして、それらを使用できるようにする必要がありますか?

4

2 に答える 2

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
    }
}
于 2012-12-22T18:04:52.307 に答える
1

問題を解決してよかったですが、他の人がこれに遭遇した場合、 を繰り返したい場合はentrySet()、2 つの方法があります。それを行う最初の方法:

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.

そして2番目:

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 ループと呼ばれ、を使用する必要がまったくなくなりIterator、コードがはるかに単純になります。これを配列で使用して、インデックスの必要性をなくすこともできることに注意してください。

String[] strs = {"foo", "bar"};
for (String str : strs)
    System.out.println(str);
于 2012-12-22T17:37:32.400 に答える