4

如何在 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]; 
}

但是有没有其他方法不为开始索引声明一个单独的参数?非常感谢。

4

4 回答 4

3

但相同的数组具有不同的起始索引。

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

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

于 2013-08-15T05:15:08.350 回答
3

一般来说,更喜欢集合而不是数组。您的特殊需求可以通过使用Lists 来解决:

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

...

List<Integer> myList = ...;
myMethod(myList.subList(3, myList.size()));

List.subList文档中:

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

(强调我的)

于 2013-08-15T05:29:02.133 回答
0

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

于 2013-08-15T05:05:42.520 回答
0

那这个呢 ?

Integer myarr[] = new Integer[] { 1, 2, 3, 4 };
System.out.println(Arrays.toString(Arrays.asList(myarr).subList(2,  myarr.length).toArray(new Integer[2])));
于 2013-08-15T05:05:47.003 回答