9

当我遍历值或键时,它们会关联吗?第二个键会映射到第二个值吗?

4

9 回答 9

14

不,不一定。为此,您应该真正使用 entrySet().iterator()。使用此迭代器,您将遍历 Map 中的所有 Map.Entry 对象,并且可以访问每个键和关联的值。

于 2008-09-24T15:58:14.960 回答
8

使用@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
}
于 2008-09-24T16:07:13.583 回答
7

您想使用这个LinkedHashMap来进行可预测的迭代顺序

于 2008-09-24T16:21:57.493 回答
3
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
于 2009-11-09T15:19:21.123 回答
2

values() 和 keySet() 都委托给 entrySet() 迭代器,因此它们将以相同的顺序返回。但就像 Alex 所说,直接使用 entrySet() 迭代器要好得多。

于 2008-09-24T16:07:06.093 回答
1

我同意 pmac72。不要假设您会从无序集合中获得有序值或键。如果它不时起作用,那只是纯粹的危险。如果要保留订单,请使用 LinkedHashMap 或 TreeMap 或公共集合 OrderedMap。

于 2009-03-03T12:37:07.603 回答
0

这个问题起初让我感到困惑,但@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
于 2008-09-24T15:56:43.827 回答
0

我第二个@basszero。尽管

for (Map.Entry<Integer, Integer> entry : a.entrySet()) 

会起作用,我发现使用自动执行此操作的数据结构更好。现在,您可以“正常”迭代

于 2008-09-24T18:07:10.830 回答
0

HashMap的keySet方法返回一个Set,不保证顺序。
HashMap 的 values() 方法返回一个 Collection,它不保证顺序。

也就是说,问题是“它们是否会相关”,所以从技术上讲,答案是可能的,但不要依赖它。

于 2008-09-24T18:41:36.177 回答