我想使用未排序的泛型集合来存储值。
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;
我该怎么做?
答案 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>();