2011-12-11 60 views
1

我正在嘗試使用LinkedList類來加載任何數組。我正在查看addAll方法的文檔,在我看來,我可以用很少的努力加載一組東西。Using LinkedList Java Class

addAll(int index, Collection<? extends E> c) 
     Inserts all of the elements in the specified collection into this list, 
     starting at the specified position. 

但我不太確定如何構造它。

我們只是說我有一個對象數組,我試圖將對象加載到鏈接列表中。
我該怎麼寫?

注意:我試圖將它加載到列表中,因爲我將多次刪除和添加。

我用下面的代碼,但我得到一個錯誤:

int[] a = new int[5]; 
    for(int index = 0; index<5; index++){ 
     a[index] = index; 

    } 

    List<Integer> list = new LinkedList<Integer>(); 
    list.addAll(Arrays.asList(a)); //error Here won't take a[] 
+0

我去了ArrayList,但我很想知道爲什麼這不起作用? – Tags

+0

查看更新回答的原因。 – Premraj

回答

2

如果您需要專門的LinkedList或可變集合類(你前面提到的添加/刪除操作),那麼Arrays.asList(T...)將不起作用,因爲它返回由指定數組支持的固定大小的列表,因此不可變,並且Arrays.asList(T...).add(T)調用將總是失敗。

如果您不需要數組,請使用僅從start開始的集合類(如ArrayList或LinkedList)。如果這是不可能的,這個collection tutorial會給你關於使用和其他方面的公平想法。

如果wanto創建一個ArrayList(或鏈表),可以使用(它將所有元素複製一個數組列表) -

new ArrayList<Element>(Arrays.asList(array)) 


編輯 -

如果數組本身是一個原始數組(如你在示例中所示),那麼上述方法將不起作用,因爲Arrays.asList(int[])實際上將返回單個元素List<int[]>,這就是爲什麼你在你的例子中得到錯誤。
如果你發現自己與原語的收集大量的工作,那麼我建議看看Trove或可能Guava提供有關收藏等日常需求真棒公用事業(它有Ints.asList()方法滿足您的要求,請參閱doc) 。

+0

我明白你在說什麼,並感謝你的幫助。它只是我的隊友決定使用Arrays進行項目(我不同意)。我將刪除並添加對象,因爲列表將隨機增加和減少。但我需要將他們的數組放入我的列表中。 – Tags

+0

@Henry then'new ArrayList (Arrays.asList(array))'是一種方法:) – Premraj

+0

謝謝Premraj,我會用ArrayList去。它確實有道理,它會做我所需要的。 – Tags

0

可以使用java.util.Arrays中的類:

List<MyType> list = Arrays.asList(array); 
+1

...或者OP可以使用'ArrayList '而不是數組。 – Spoike

+0

這隻會將數組的實例添加到列表中而不是數組的內容。 – Tags

+0

我無法做任何事情在陣列方面。這個項目是由人們單獨完成的。我想要一個列表,因爲我不必轉移或擔心死點(空值)。 – Tags

1

開始通過變換數組列表,然後這個列表中的所有元素添加到您的鏈接列表:

List<Foo> list = new LinkedList<Foo>(); 
list.addAll(Arrays.asList(myArray()); 

或者只是通過自己的數組中迭代,並添加每個元素:

List<Foo> list = new LinkedList<Foo>(); 
for (Foo foo : myArray) { 
    list.add(foo); 
} 

這隻需要一行代碼,簡單明瞭,效率更高。

請注意,在大多數情況下,ArrayList比LinkedList更高效。