Pythonでは、以下に示すように、キーと値のペアをディクショナリに入れて、それらをループすることができます。
for k,v in d.iteritems():
print k,v
Java HashMapsでこれを行う方法はありますか?
Pythonでは、以下に示すように、キーと値のペアをディクショナリに入れて、それらをループすることができます。
for k,v in d.iteritems():
print k,v
Java HashMapsでこれを行う方法はありますか?
はい-例:
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);
}
HashMap.entrySet()は、dictionary.iteritems()と同様のキーと値のペアのBeanを返します。その後、それらをループできます。
Python版に一番近いと思います。
回答に示されているように、aを反復処理する方法は基本的に2つありますMap
(これらの例で想定Map<String, String>
します)。
繰り返しMap#entrySet()
ます:
for (Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
繰り返して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.
Set<Map.Entry> set = d.entrySet();
for(Map.Entry i : set){
System.out.println(i.getKey().toString() + i.getValue().toString);
}
そんな感じ...
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));
}