在c中,您可以通过传递i
元素的地址,通过引用从某个索引(例如i-th
)传递数组。
现在我想知道是否&我如何创建一个类似的结构来使用Java。 我目前正在java中实现一个inplace radix-4 fft,我只对部分初始数据数组进行递归调用。
所以说我有一个数据数组a= [1,2,3,4,5,6,7,8]
,我希望进行4次调用,每个调用接收a
的第4个作为参数,这样我就可以对a执行就地修改。
答案 0 :(得分:2)
直接使用1维数组无法在Java中完成。
你可以使用多维数组来完成它。
例如:
int[][] a = {{1,2},{3,4},{5,6},{7,8}};
现在您可以将a[i]
传递给您的方法,该方法可以修改其元素。
或者您可以使用List
创建数组的Arrays.asList()
视图。然后,您可以使用subList()
将List
的部分内容传递给您的方法,然后修改这些部分。这些修改将反映在原始数组中。
例如:
public static void changeSubList(List<Integer> list) {
list.set (0, 150);
}
public static void main (java.lang.String[] args)
{
Integer[] array = {1,2,3,4,5,6,7,8};
List<Integer> list = Arrays.asList (array);
changeSubList(list.subList (0, 2));
changeSubList(list.subList (2, 4));
changeSubList(list.subList (4, 6));
changeSubList(list.subList (6, 8));
System.out.println (Arrays.toString (array));
}
输出:
[150, 2, 150, 4, 150, 6, 150, 8]
唯一的问题是你不能使用基元数组。
答案 1 :(得分:1)
有一个方法将数组和起始和结束索引作为参数。这是一个非常常见的习惯用法,但当然它希望该方法表现良好,而不是在其允许的索引之外读取。
它简单,高效且几乎是Java中唯一的现实方式。所有你不得不担心的是破坏数组的错误方法,但这不应该发生吗?
答案 2 :(得分:0)
你无法真正做到这一点#34;开箱即用。
你可以创建一个&#34;数组视图&#34;只允许访问特定范围的类。
但是你不能在不分配内存和复制条目的情况下创建子数组。