從概念上講,這裏發生了什麼?將ArrayList添加到ArrayList
我有一個ArrayList
ArrayList<SomeClass> myArray = new ArrayList<SomeClass>();
然後我添加的東西給它這樣的
myArray.add(new myArray(1, 2, 3));
從概念上講,這裏發生了什麼?將ArrayList添加到ArrayList
我有一個ArrayList
ArrayList<SomeClass> myArray = new ArrayList<SomeClass>();
然後我添加的東西給它這樣的
myArray.add(new myArray(1, 2, 3));
我有一個數組
ArrayList myArray = new ArrayList();
不,你不」有一個數組。陣列使用brackes []
聲明,就像這樣:
int[] myArray;
你有ArrayList
類的對象。該對象將在內部使用數組來存儲數據,並在需要分配更多值時動態更改新數組的數組。
然後我添加的東西給它這樣的
myArray.add(new myArray(1, 2, 3));
概念上,這是錯誤的,甚至不會編譯。如果您想要在數組中添加多個值,則應使用ArrayList#addAll
方法,該方法會接收另一個集合。然後,你有兩種方式來傳遞一個Collection
在一個聲明:
使用Arrays#asList
創建一個列表:
myArray.addAll(Arrays.asList(1, 2, 3));
您可以使用雙大括號初始化:
myArray.addAll(new ArrayList() {{
add(1);
add(2);
add(3);
}});
你應該考慮到,你應該指定,而不是使用原始數據一般爲您ArrayList
:
ArrayList<Integer> myArray = new ArrayList<Integer>();
myArray.addAll(new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
}});
更多信息:
請注意,如果你有一個ArrayList
被綁定到自定義類,比方說ArrayList<SomeClass> myArrayList
,那麼編譯器會阻止您添加元素,以不通過IS-A測試(由instanceof
操作說明)列表,所以這段代碼:
ArrayList<SomeClass> myArrayList = new ArrayList<SomeClass>();
myArrayList..addAll(new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
}});
由於Integer
不是SomeClass
,因此將無法編譯。類似與這段代碼:
ArrayList<SomeClass> myArrayList = new ArrayList<SomeClass>();
myArray.add(Arrays.asList(1, 2, 3));
但由於type erasure您可以通過使用原始類型的欺騙編譯器。例如:
public void addData(ArrayList yourArrayList, Object anyData) {
yourArrayList.add(anyData);
}
然後在你的代碼,調用此方法:
ArrayList<String> myArrayList = new ArrayList<String>(); //allows Strings only
myArrayList.add("Hello world");
//myArrayList.add(0); //this won't compile because trying to add an Integer
addData(myArrayList, 0); //this will compile for using raw ArrayList and sending an Integer
System.out.println(myArrayList);
它會打印:
[Hello world, 0]
「**概念上這裏發生了什麼?**」 –
如果你知道添加的數組列表的大小,那將會很好ArrayList的大小:'new ArrayList(size)' – herau
@LuiggiMendoza他似乎在問什麼是數組列表/它是如何工作的。沒有其他的。 –
myArray.add(new myArray(1, 2, 3));
這是不正確的,不編譯,因爲myArray
不是一種類型,它只是一個參考,您需要某種類型的整數,或者如果您想添加另一個列表,則使用addAll
。
你可以使用這樣的東西。
List<Integer> myArray = new ArrayList<>(); // specify with generics type parameter
//do some things and then
myArray.addAll(Arrays.asList(1,2,3)); // use this helper method to add a list to another list
或者,如果你只想創建和填充,只需要使用
List<Integer> myArray = Arrays.asList(1,2,3,4,5);
用戶問:「**概念上是怎麼回事?**」 –
@JordanD編輯 – nachokk
我想我知道你想要做什麼,說你有這個。
ArrayList<Integer[]> myArray = new ArrayList<Integer[]>();
和你想的陣列添加到它,你基本上要打電話
myArray.add(((Integer[]) new int[] { 0, 1, 2 }));
將在ArrayList中的數組[0,1,2]添加到下一個索引。
對於〔實施例,下面的代碼
ArrayList<Integer[]> myArray = new ArrayList<Integer[]>();
myArray.add(((Integer[]) new int[] { 0, 1, 2 }));
myArray.add(((Integer[]) new int[] { 1, 0, 2 }));
myArray.add(((Integer[]) new int[] { 3, 2, 1 }));
會造成以下結果:
myArray index 0 = [0, 1, 2]
myArray index 1 = [1, 0, 2]
myArray index 2 = [3, 2, 1]
這是你的問題?
實際上你並沒有一個數組,你有一個ArrayList。 ArrayList是List接口的可調整大小的實現。這意味着,除其他外,您不必像定義數組那樣定義長度。
我不認爲你已經提供了將實際編譯,因爲當你去代碼:
myArray.add(new myArray(1, 2, 3));
你沒有提供一個類型。你應該去類似:
myArray.add(new ArrayList<Integer>(Arrays.asList(1,2,3)));
使用asList()幾乎給數組分配「默認」值相當於。該陣列相當於將是這個樣子:
Integer[] intArray = new Integer[] {1,2,3};
你也應該參數的ArrayList
(S),這基本上意味着你在說什麼的ArrayList可以容納。例如:
ArrayList<Integer>
可以保持整數。
原因你必須使用一個包裝類(Integer
&不int
)是因爲在Java集合不允許您存儲原始類型,例如int
或double
。
您可以擁有一個集合,持有另一個集合。在這種情況下,你可以去:
ArrayList<ArrayList<Integer>> myArrayList = new ArrayList<ArrayList<Integer>>();
myArrayList.add(new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
myArrayList.add(new ArrayList<Integer>(Arrays.asList(9, 12, 24)));
for (ArrayList<Integer> index : myArrayList) {
System.out.println(index);
}
在這裏你有一個ArrayList控制其他兩個ArrayList。這導致的打印:
[1, 2, 3]
[9, 12, 24]
的
可能重複[?如何連接在Java中的兩個陣列(http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in -java) –
'myArray'是'ArrayList' – Reimeus
@JoelWitteveen,這是不正確的。問題是關於數組列表包含數組的方式 –