Java 将数组作为具有不同起始索引的参数传递

Java 将数组作为具有不同起始索引的参数传递,java,Java,如何在Java中传递数组,以便为数组参数指定不同的开始索引(第0个索引)。在C++中,可以像这样传递数组 myMethed(myArray + 3); // passing method where begin index is 4th element ... void myMethod(int* arr) { int val = arr[0]; // refers to the 4th element int val2 = arr[1]; // 5th element }

如何在Java中传递数组,以便为数组参数指定不同的开始索引(第0个索引)。在C++中,可以像这样传递数组

myMethed(myArray + 3); // passing method where begin index is 4th element

...

void myMethod(int* arr) {
    int val = arr[0]; // refers to the 4th element
    int val2 = arr[1]; // 5th element
}
我如何用Java做类似的事情。我尝试使用
Arrays.copyOfRange
复制数组的子集,但我不想要单独的副本,而是要使用不同起始索引的同一数组

我当然可以做到:

myMethod(int[] arr, int startIndex) {
    int val = arr[startIndex];
    int val2 = arr[startIndex + 1]; 
}
但是有没有其他方法不为开始索引声明单独的参数呢?
非常感谢。

您可以创建一个迭代器,将其移动到所需位置,并将其作为方法参数传递

这个怎么样

Integer myarr[] = new Integer[] { 1, 2, 3, 4 };
System.out.println(Arrays.toString(Arrays.asList(myarr).subList(2,  myarr.length).toArray(new Integer[2])));
但是相同的数组具有不同的开始索引

在Java中,数组是一个对象,其大小是在初始化时定义的。起始索引始终为零,并且大小是固定的。分配内存后,这两个选项不能更改。在Java中,相同的数组表示相同的对象,而不是内存空间

Java不允许将分配的内存作为新数组进行切片。因此,您将始终需要创建另一个数组,或者显式地将起始索引传递给正在调用的方法。

通常。您的特殊需求可以通过使用
List
s来解决:

myMethod(List<Integer> list) {
    int val = list.get(0);
    int val2 = list.get(1); 
}

...

List<Integer> myList = ...;
myMethod(myList.subList(3, myList.size()));
myMethod(列表){
int val=list.get(0);
int val2=list.get(1);
}
...
列表myList=。。。;
myMethod(myList.subList(3,myList.size());
从文件中:

返回此列表中指定的
fromIndex
(包含)和
toIndex
(独占)之间部分的视图。(如果
fromIndex
toIndex
相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作


(强调我的)

没有别的办法。您已经有了最好的选择,以防不需要重复的数组。@Rohitjain是正确的。根本原因是java中没有指针算法,甚至没有指针。感谢你选择的神。你自己的解决方案没有错。编写java代码时,应该用java来思考,而不是C++。它确实复制了数组。为什么不呢?源代码如下:
toArray
总是制作一个副本-不确定指向该javadoc(错误的
ArrayList
)是什么意思。