2012-10-11 107 views
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; 

我應該爲此做什麼?

+3

你讀的JavaDoc? – home

+0

也許一個ArrayList將幫助你更好 – MaVRoSCy

+0

根據JavaDoc這個類實現了Set接口,由一個哈希表(實際上是一個HashMap實例)支持。它對集合的迭代次序沒有任何保證;特別是它並不能保證訂單在一段時間內保持不變,這就是爲什麼他們不是按照你所訂購的順序 – MaVRoSCy

回答

5

HashSet不保證訂單保持不變。如果您想維護訂單,請使用ArrayList

+1

或者任何實現List的類(如'ArrayList','LinkedList'等).- –

+2

+1或者使用LinkedHashSet' –

+0

Peter +1,就像@zuxqoj在他的解決方案中寫的那樣。 –

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)); 
+0

爲什麼需要'List'的好的解釋,並適當地使用它的接口。 –

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)); 
0

你可以使用LinkedHashSet保存輸入命令:

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