将值动态附加到long []数组中

时间:2011-02-28 16:18:55

标签: java android

我需要一些关于在数组中添加值的帮助

例如

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

当我这样做时,我实例化一个值为

的数组

但如果我有另一个值

,我如何将其附加到上面的数组
3, 4, 5

使它像这样

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

我尝试了System.arraycopy函数,但我只能覆盖数组,当我尝试追加它时,我得到一个空指针异常

由于

我使用它和for循环一次一个地输入值

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

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

追加通常不是您对数组执行的操作。我建议您使用ArrayList对象,请参阅API,您可以随时将其转换回数组。

答案 2 :(得分: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]

答案 3 :(得分: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]

答案 4 :(得分:0)

您无法动态地将值附加到数组,因为在初始化时将内存空间分配给数组对象,这意味着已分配预先定义的连续内存位置。因此,我们需要使用数组列表,因为它在内部使用链表数据结构并允许您轻松添加/删除/排序,而不会浪费任何内存空间。