Java Set上有多个for循环

时间:2013-03-05 10:20:46

标签: java map set

我有一个带有值的Map,并使用Map.keySet方法获取一个Set。 在这段代码中:

Map<String, String> map = new HashMap<>(); 
map.put("1", "a"); 
map.put("2", "b"); 
map.put("3", "c"); 
Set<String> set = map.keySet();

for (int i = 0; i < 5; i++) {
    for (String key : set) {
        System.out.println(key);
    } 
}

我保证会得到

1
2
3
每次都写出来?这份保证写在哪里?在Javadoc?

编辑:实际上我并不关心插入顺序,但我关心的是,在一个集合上使用for-each循环将反复产生相同的结果,前提是不正确的映射不会改变(I不要打电话,删除)。

5 个答案:

答案 0 :(得分:0)

如果要按照放置密钥的顺序检索,请使用LinkedHashMap

答案 1 :(得分:0)

不,你不是。但您可以使用LinkedHashMaphttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html),然后您将得到保证。

答案 2 :(得分:0)

LinkedHashMap 用于addn(put)的顺序, TreeMap (界面SortedMap)用于键的顺序。

答案 3 :(得分:0)

不幸的是,HashMap的文档声明keySet()方法没有返回SortedSet,它只返回Set,但订单无法保证。

请参阅HashMap.keySet()

特别是读取:它不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。

答案 4 :(得分:0)

除非您使用HashMap实现可以为您提供此保证的自定义设置,否则您无法保证具体订单。 HashMap的 Set 为您提供了一个 Iterator()方法,该方法迭代“ no specific order ”中的元素。

阅读java文档:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Set.html#iterator()

如果您希望保证元素通过按顺序(即升序)进行迭代,请使用实现 SortedMap 的内容,例如 TreeMap

TreeMap文档:http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

在此页面上,您可以找到 getSet()方法,其中显示“ set的迭代器按升序返回键”。