在集合的末尾添加一个新行

时间:2012-10-11 14:51:00

标签: java generics sorting hashset

我想使用未排序的泛型集合来存储值。

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 个答案:

答案 0 :(得分:5)

HashSet并不保证订单保持不变。如果您想维护订单,请使用ArrayList

答案 1 :(得分: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 ) );

答案 2 :(得分: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));

答案 3 :(得分:0)

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

Set<Integer> map = new LinkedHashSet<Integer>();