追加值动态成长[]数组
问题描述:
我需要关于添加值到一个数组追加值动态成长[]数组
例如
long[] s = new long[] {0, 1, 2};
一些帮助,当我为此我实例的阵列与所述值
但我如何追加到这上述阵列,如果我有另一个值
3, 4, 5
使它像这样
s = new long[] {1, 2, 3, 4, 5, 6};
我试过System.arraycopy功能,但我只能够在此改变阵列,当我尝试添加到它,我得到一个空指针异常
感谢
SOLUTION
我用这与一个for循环由一个
放于值一次
答
您不能将元素“追加”到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);
答
您已经创建了一个等于三的固定大小的数组,您不能追加更多。您需要以新的大小复制到新阵列。见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]
答
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]
答
您不能将值附加到数组动态由于存储空间在初始化时被分配给数组对象,这意味着预先定义的连续内存位置被分配。因此,我们需要使用数组列表,因为它在内部使用链接列表数据结构,并允许您轻松添加/删除/排序,而不会浪费任何内存空间。
感谢您对arraycopy的帮助我正在查看arraylist选项 – ben 2011-02-28 16:31:25
介意如何使用arraylist?我需要的输出是一个很长的[],这样的Android振动功能将工作 – ben 2011-02-28 16:37:04
@aaioobe:我知道移动设备越来越快,但如果Android API期望长[]而不是列表{长}它的一个原因:不必要的包装**将杀死移动设备的perf/battery/etc。 – Gugussee 2011-02-28 16:49:59