如何在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];
}
但是,如果没有为起始索引声明单独的参数,还有其他方法吗? 非常感谢。
答案 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
之间的部分视图。 (如果fromIndex
和toIndex
相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。
(强调我的)
答案 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])));