0

値を持つ 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 ループを使用すると、基になるマップが変更されない限り、同じ結果が何度も生成されるという事実が気になります (私はput、remove を呼び出します)。

4

5 に答える 5

0

key を入れた順に取得したい場合はLinkedHashMapを使用します。

于 2013-03-05T10:22:43.477 に答える
0

いいえ、違います。LinkedHashMapただし、 (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html)を使用すると、保証されます。

于 2013-03-05T10:23:06.220 に答える
0

追加 (put) の順序についてはLinkedHashMap 、キーの順序についてはTreeMap (インターフェース SortedMap) を使用します。

于 2013-03-05T10:24:16.200 に答える
0

残念ながら、HashMap のドキュメントでは、keySet()メソッドが aを返さず、順序が保証されていない をSortedSet返すだけであると述べています。Set

HashMap.keySet()を参照してください。

特にお読みください。セットの反復順序については保証されません。特に、順序が長期的に一定であることを保証するものではありません。

于 2013-03-05T10:24:45.177 に答える
0

この保証を提供できるカスタムセットを実装する HashMap を使用しない限り、特定の順序は保証されません。Set the HashMap には、「特定の順序で」要素を反復処理するIterator()メソッドがあります。

Java ドキュメントを読む: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Set.html#iterator()

要素がin-order、つまり昇順で繰り返されることを保証したい場合は、TreeMapのようなSortedMapを実装するものを使用してください。

TreeMap ドキュメント: http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

このページには、 「セットのイテレータはキーを昇順で返す」というgetSet()メソッドがあります。

于 2013-03-05T10:48:21.110 に答える