我正在寻找一种方法将初始数组从特定索引切割到另一个索引
int[] array = {10,5,4,4,3,5,6};
int[] arrayCopy;
在此示例中,如果我想从索引[1] 分段到索引[4] 。我存储在arrayCopy
中的新数组应该看起来像arrayCopy[] = {5,4,4,3}
。常见的问题是,我的目标是保持对原始数组的引用。所以,如果在arrayCopy
中我更改了一个元素,那么array
arrayCopy[] = {5,4,4,3}
arrayCopy[0] = 20 // arrayCopy[] = {20,4,4,3} and array = {10,20,4,4,3,5,6};
我尝试了Arrays.copyOfRange()
但是深层复制和System.arraycopy()
制作了浅层副本,但它没有完成我想要的是。
我试着制作自己的方法
public E[] fillArray(int[] _array, int begin, int end){
int[] arrayTemp;
for ( int i = begin ; i <= end; i++ ) {
arrayTemp[i] = _array[i];
}
return arrayTemp;
}
输出
arrayCopy = fillArray(array,1,4);
Exception in thread "main" java.lang.NullPointerException
注意:我想保留数组机制而不使用ArrayList或......
答案 0 :(得分:1)
Can I change the second array and the first array will change too?
Java阵列无法支持该功能。
Java数组是一个Object,因此所有数组都是独立的对象,它们有自己的数组值内存结构。
(这与C不同,其中数组是通过指针操作完成的,因此第二个指针可以指向已被另一个指针引用的数组的内存序列。)
如果你想要第一个数组的子数组,那么它被映射成使得对子数组的更改反映在主数组中,反之亦然,你还需要其它数据。
一种选择是使用List
,并使用subList(int fromIndex, int toIndex)
创建子列表:
返回此列表中指定的
fromIndex
,包含和toIndex
之间的部分视图。 (如果fromIndex
和toIndex
相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,并且反之亦然。
如果您已有数组,则可以使用Arrays.asList(T... a)
将数组包含在列表中,然后使用subList()
作为任何其他列表。
返回由指定数组支持的固定大小的列表。 (对返回列表的更改&#34;通过&#34;写入数组。)
请注意,List
不适用于原语类型,因此如果您的数组是基元,则应使用相应类型的Buffer
({ {1}},ByteBuffer
,CharBuffer
,DoubleBuffer
,FloatBuffer
,IntBuffer
,LongBuffer
)。
E.g。对于ShortBuffer
,使用IntBuffer.wrap(int[] array, int offset, int length)
创建缓冲区:
将int数组包装到缓冲区中。
新缓冲区将由给定的int数组支持;也就是说,对缓冲区的修改将导致数组被修改,反之亦然。
如果您始终通过int[]
访问数组,使用IntBuffer.wrap(int[] array)
来包装整个数组,您的代码可能会使用IntBuffer
而不知道它是否正在访问完整数组或子阵列。
答案 1 :(得分:-1)
这应该有用。
public static int[] fillArray(int[] _array, int begin, int end){
int[] arrayTemp = new int[end-begin+1];
for ( int i = begin ; i <= end; i++ ) {
arrayTemp[i-begin] = _array[i];
}
return arrayTemp;
}