当我迭代值或键时,它们是否会相关联?第二个键是否映射到第二个值?
不一定。您应该真正使用entrySet().iterator()来实现此目的。有了这个迭代器,您将遍历Map中的所有Map.Entry对象,并可以访问每个键和关联值。
要使用@Cuchullain提到的entrySet:
Map<String, String> map = new HashMap<String, String>();
// populate hashmap
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// your code here
}
public class Test {
public static void main(String[] args) {
HashMap <String,String> hashmap = new HashMap<String,String>();
hashmap.put("one", "1");
hashmap.put("two", "2");
hashmap.put("three", "3");
hashmap.put("four", "4");
hashmap.put("five", "5");
hashmap.put("six", "6");
Iterator <String> keyIterator = hashmap.keySet().iterator();
Iterator <String> valueIterator = hashmap.values().iterator();
while(keyIterator.hasNext()) {
System.out.println("key: "+keyIterator.next());
}
while(valueIterator.hasNext()) {
System.out.println("value: "+valueIterator.next());
}
}
}
key: two
key: five
key: one
key: three
key: four
key: six
value: 2
value: 5
value: 1
value: 3
value: 4
value: 6
values()和keySet()方法都委托给entrySet()迭代器,因此它们返回的顺序相同。但正如Alex所说,直接使用entrySet()迭代器会更好。
我同意pmac72的观点。不要假设您会从无序集合中获得有序的值或键。如果有时可以正常工作,那只是纯粹的巧合。如果想要保留顺序,请使用LinkedHashMap或TreeMap或commons collections OrderedMap。
HashMap的keySet方法返回一个Set,它不保证顺序。
HashMap的values()方法返回一个Collection,它不保证顺序。
话虽如此,问题是“它们是否会相关”,所以从技术上讲答案可能是,但不要依赖它。
一开始这个问题让我感到困惑,但是@Matt为我解答了。
考虑使用entrySet()方法,该方法返回Map中键值对的集合。
Map<Integer, Integer> a = new HashMap<Integer, Integer>(2);
a.put(1, 2);
a.put(2, 3);
for (Map.Entry<Integer, Integer> entry : a.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
这将输出:
1 => 2
2 => 3
3 => 3
我同意@basszero的观点。虽然
for (Map.Entry<Integer, Integer> entry : a.entrySet())
这样做是可行的,但我发现使用自动完成此操作的数据结构更好。现在,您可以正常迭代。