2011-02-28 62 views
5

我需要關於添加值到一個數組追加值動態成長[]數組

例如

long[] s = new long[] {0, 1, 2}; 

一些幫助,當我爲此我實例的陣列與所述值

但我如何追加到這上述陣列,如果我有另一個值

3, 4, 5 

使它像這樣

s = new long[] {1, 2, 3, 4, 5, 6}; 

我試過System.arraycopy功能,但我只能夠在此改變陣列,當我嘗試添加到它,我得到一個空指針異常

感謝

SOLUTION

我用這與一個for循環由一個

放於值一次

回答

8

您不能將元素「追加」到Java中的數組。數組的長度在創建時確定,不能動態改變。

如果你真的需要一個long[]的解決方案是創建一個更大的陣列,拷貝過來的元素,並指出了參照新的陣列,像這樣:

long[] s = new long[] {0, 1, 2}; 
long[] toAppend = { 3, 4, 5 }; 

long[] tmp = new long[s.length + toAppend.length]; 
System.arraycopy(s, 0, tmp, 0, s.length); 
System.arraycopy(toAppend, 0, tmp, s.length, toAppend.length); 

s = tmp; // s == { 0, 1, 2, 3, 4, 5 } 

然而,你可能想爲此目的使用ArrayList<Long>在這種情況下,您可以使用.add-方法追加元素。如果您選擇此選項,它應該看起來像

// Initialize with 0, 1, 2 
ArrayList<Long> s = new ArrayList<Long>(Arrays.asList(0L, 1L, 2L)); 

// Append 3, 4, 5 
s.add(3L); 
s.add(4L); 
s.add(5L); 


long[] longArray = new long[s.size()]; 
for (int i = 0; i < s.size(); i++) 
    longArray[i] = s.get(i); 
+0

感謝您對arraycopy的幫助我正在查看arraylist選項 – ben 2011-02-28 16:31:25

+1

介意如何使用arraylist?我需要的輸出是一個很長的[],這樣的Android振動功能將工作 – ben 2011-02-28 16:37:04

+0

@aaioobe:我知道移動設備越來越快,但如果Android API期望長[]而不是列表{長}它的一個原因:不必要的包裝**將殺死移動設備的perf/battery/etc。 – Gugussee 2011-02-28 16:49:59

1

附加通常不是您使用陣列進行的操作。我建議您使用ArrayList對象,請參閱API,您可以隨時將其轉換回數組。

+0

感謝查看ArrayList選項 – ben 2011-02-28 16:32:00

+0

祝你好運... :) – posdef 2011-02-28 16:44:51

+0

感謝閱讀我們的API現在 – ben 2011-02-28 16:46:45

1

您已經創建了一個等於三的固定大小的數組,您不能追加更多。您需要以新的大小複製到新陣列。見Arrays class

long[] s = new long[] {0L, 1L, 2L}; 
    long[] l = Arrays.copyOf(s, 6); 
    l[3] = 3L; 
    l[4] = 4L; 
    l[5] = 5L; 
    System.out.println(Arrays.toString(l)); 

輸出是

[0,1,2,3,4,5]

+0

嗯我可能會嘗試ArrayList方法,因爲我寫的只是一個例子,我可能需要添加幾百個數值到數組 – ben 2011-02-28 16:32:56

+0

@benjamin李偉大。無論適合你。你現在知道選項。 :) – Nishant 2011-02-28 16:34:27

+0

感謝您的幫助:) – ben 2011-02-28 16:39:19

0
long[] s = new long[] {0, 1, 2}; 
long[] s2=new long[]{3, 4, 5}; 
int len_s= s.length; 
s= Arrays.copyOf(s, len_s+s2.length); //extends range arrays 
System.arraycopy(s2,0,s1,len_s,s2.length); // copy three elements from s2 to s begin at s[len_s]; s2.length is number of elements s2. 
System.out.println(Arrays.toString(a1)); 

輸出是

[0,1,2,3,4,5] 
0

您不能將值附加到數組動態由於存儲空間在初始化時被分配給數組對象,這意味着預先定義的連續內存位置被分配。因此,我們需要使用數組列表,因爲它在內部使用鏈接列表數據結構,並允許您輕鬆添加/刪除/排序,而不會浪費任何內存空間。