0

ソートされていないジェネリックコレクションを使用して値を格納したいと思います。

Set<Integer> map = new HashSet<Integer>();
map.Add( new Integer( 3 ) );
map.Add( new Integer( 2 ) );
map.Add( new Integer( 4 ) );
map.Add( new Integer( 1 ) );

要素は3,2,4,1になると思います。次に、このセットから配列を作成したいと思います。

Integer[] arr = ( Integer[] )map.toArray( new Integer[map.size()] );

そして、arrの要素は、マップに配置したものとは順序が異なるため、驚いています。取り決めは、次のような配列を取得することです。

arr[0] = 3;
arr[1] = 2;
arr[2] = 4;
arr[3] = 1;

私はこれのために何をすべきですか?

4

4 に答える 4

5

HashSet順序が同じままであることを保証するものではありません。順序を維持したい場合は、を使用してArrayListください。

于 2012-10-11T14:54:21.543 に答える
2

セットは順序付けられていません。要素の順序を維持することは保証されていません。要素を追加した順序を同じにする必要がある場合は、リストを使用する必要があります。

List<Integer> map = new ArrayList<Integer>();
map.add( new Integer( 3 ) );
map.add( new Integer( 2 ) );
map.add( new Integer( 4 ) );
map.add( new Integer( 1 ) );
于 2012-10-11T14:55:22.103 に答える
2

HashSetの代わりにLinkedHashSetを使用する

    Set<Integer> map = new LinkedHashSet<Integer>();
    map.add( new Integer( 3 ) );
    map.add( new Integer( 2 ) );
    map.add( new Integer( 4 ) );
    map.add( new Integer( 1 ) );

    Integer[] arr = ( Integer[] )map.toArray( new Integer[map.size()] );

    System.out.println(Arrays.toString(arr));
于 2012-10-11T14:56:21.617 に答える
0

LinkedHashSet入力順序を保持するために使用できます。

Set<Integer> map = new LinkedHashSet<Integer>();
于 2012-10-11T14:57:00.270 に答える