在Python中,您可以使用字典来存储键值对,并且可以通过循环遍历它们,如下所示:
for k,v in d.iteritems():
print k,v
有没有一种方法可以使用Java HashMap来实现这个?
for k,v in d.iteritems():
print k,v
有没有一种方法可以使用Java HashMap来实现这个?
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);
}
如答案所示,基本上有两种方法可以迭代一个Map
(在这些例子中假设为Map<String, String>
)。
Iterate over Map#entrySet()
:
for (Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
Iterate over Map#keySet()
and then use Map#get()
to get the value for every key:
for (String key : map.keySet()) {
System.out.println(key + "=" + map.get(key));
}
get()
。有人可能会认为创建键集迭代器的成本较低,因为它不需要考虑值。但是不管你信不信,keySet().iterator()
创建并使用与 entrySet().iterator()
相同的迭代器。唯一的区别在于,在keySet()
的情况下,迭代器的next()
调用返回的是it.next().getKey()
而不是it.next()
。
AbstractMap#keySet()
的Javadoc证明了这一点:
子类的迭代器方法返回此映射条目集合上的“包装对象”。
此外,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();
}
};
}
HashMap.entrySet()将返回类似于dictionary.iteritems()的键值对bean。然后您可以遍历它们。
我认为这是最接近Python版本的方法。
Set<Map.Entry> set = d.entrySet();
for(Map.Entry i : set){
System.out.println(i.getKey().toString() + i.getValue().toString);
}
Something like that...
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));
}
get()
成本。这至少不是遍历map的“正确”方式。我可以想象,有人因为这个原因对你进行了负面评价,无论你的意图有多好。 - BalusCprivate Iterator<Entry<K,V>> i = entrySet().iterator(); public K next() { return i.next().getKey(); }
- BalusC