Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将值动态追加到长[]数组中_Java_Android - Fatal编程技术网

Java 将值动态追加到长[]数组中

Java 将值动态追加到长[]数组中,java,android,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

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

比如说

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;
在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
在这种情况下,您可以使用
.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、1、2初始化
ArrayList s=新的ArrayList(Arrays.asList(0L、1L、2L));
//附加3、4、5
s、 添加(3L);
s、 添加(4L);
s、 添加(5L);
long[]longArray=新的long[s.size()];
对于(int i=0;i
追加通常不是对数组执行的那种操作。我建议您使用
ArrayList
对象,请参见,您可以随时将其转换回数组

您已经创建了一个固定大小等于3的数组,不能再追加了。您需要复制到具有新大小的新阵列。看

输出是

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

输出为

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

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

感谢arraycopy的帮助,我正在查看arraylist选项Mind,其中显示了如何使用arraylist?我需要的输出是一个长[],以便android振动功能将work@aaioobe:我知道移动设备的速度越来越快,但是如果Android API期望长[]而不是列表{long}这是有原因的:不必要的包装会扼杀移动设备的性能/电池等。你不需要自己用for循环转换回阵列。
long[]longArray=s.toArray()
longArray=s.toArray(longArray)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]