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

时间:2013-08-15 04:57:05

标签: 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中做类似的事情。我尝试使用Arrays.copyOfRange复制数组的一个子集,但我不想要一个单独的副本,而是一个具有不同起始索引的相同数组。

当然我可以这样做:

myMethod(int[] arr, int startIndex) {
    int val = arr[startIndex];
    int val2 = arr[startIndex + 1]; 
}

但是,如果没有为起始索引声明单独的参数,还有其他方法吗? 非常感谢。

4 个答案:

答案 0 :(得分:2)

  

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

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

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

答案 1 :(得分:2)

一般来说,prefer collections over arrays。您可以通过使用List来解决您的特殊需求:

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相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。

(强调我的)

答案 2 :(得分:0)

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

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