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中的元素的顺序与我放入 map 中的顺序不同。交易是获得这样的数组:

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

使用LinkedHashSet而不是 HashSet

    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 回答
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 回答
0

您可以使用LinkedHashSet来保留输入顺序:

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