7

Pythonでは、以下に示すように、キーと値のペアをディクショナリに入れて、それらをループすることができます。

for k,v in d.iteritems():
    print k,v

Java HashMapsでこれを行う方法はありますか?

4

5 に答える 5

20

はい-例:

Map<String, String> map = new HashMap<String, String>();
// add entries to the map here

for (Map.Entry<String, String> entry : map.entrySet()) {
    String k = entry.getKey();
    String v = entry.getValue();
    System.out.printf("%s %s\n", k, v);
}
于 2010-07-01T12:11:31.847 に答える
6

HashMap.entrySet()は、dictionary.iteritems()と同様のキーと値のペアのBeanを返します。その後、それらをループできます。

Python版に一番近いと思います。

于 2010-07-01T12:11:46.627 に答える
6

回答に示されているように、aを反復処理する方法は基本的に2つありますMap(これらの例で想定Map<String, String>します)。

  1. 繰り返しMap#entrySet()ます:

    for (Entry<String, String> entry : map.entrySet()) {
        System.out.println(entry.getKey() + "=" + entry.getValue());
    }
    
  2. 繰り返してMap#keySet()から、を使用Map#get()してすべてのキーの値を取得します。

    for (String key : map.keySet()) {
        System.out.println(key + "=" + map.get(key));
    }
    

get()2つ目はおそらく読みやすいですが、反復ごとに不必要に呼び出すというパフォーマンスコストがかかります。キーセットイテレータの作成は、値を考慮する必要がないため、より安価であると主張する人もいるかもしれません。しかし、信じられないかもしれませんが、と同じイテレータをkeySet().iterator() 作成して使用します。唯一の違いは、イテレータの呼び出しの場合、の代わりに戻ることです。entrySet().iterator()keySet()next()it.next().getKey()it.next()

AbstractMap#keySet()javadocは、これを証明しています。

サブクラスのイテレータメソッドは、このマップのentrySet()イテレータに対して「ラッパーオブジェクト」を返します。

AbstractMapソースコードもこれを証明しています。これがメソッドの抜粋ですkeySet()(Java 1.6の300行目あたり):

public Iterator<K> iterator() {
    return new Iterator<K>() {
        private Iterator<Entry<K,V>> i = entrySet().iterator(); // <-----

        public boolean hasNext() {
            return i.hasNext();
        }

        public K next() {
            return i.next().getKey(); // <-----
        }

        public void remove() {
            i.remove();
        }
    };
}

Note that readability should be preferred over premature optimization, but it's important to have this in mind.

于 2010-07-01T14:01:18.933 に答える
3
Set<Map.Entry> set = d.entrySet();
for(Map.Entry i : set){
  System.out.println(i.getKey().toString() + i.getValue().toString);
}

そんな感じ...

于 2010-07-01T12:13:48.623 に答える
1

Javaでは、次のように同じことができます。

    HashMap<String, String> h = new HashMap<String, String>();
    h.put("1","one");
    h.put("2","two");
    h.put("3","three");

    for(String key:h.keySet()){
        System.out.println("Key: "+ key + " Value: " + h.get(key));
    }
于 2010-07-01T12:14:16.027 に答える