自从我上次用 Java 编写代码以来已经有一段时间了,但我在这里需要一点提示。 我们有一个简单的函数——注意这是 C:
void update(double *source, double *target, int n) {
for(int i = 0; i < n; ++i)
target[i] = source[i] * i; // well, actually a bit more complicated, just some kind of calculation
}
所以,现在我需要用 Java 高效地重新编写这个函数。我的问题是:
- Java 当然没有指针,所以我如何才能有效地传递数组,而不会因按值调用而产生大量内存复制操作
- 哪种数据结构最适合存储数组
注意source和target是大数组,最多存储100万个元素
最佳答案
在 Java 中几乎是一样的:
static void update(double[] source, double[] target, int n)
{
for (int i = 0; i < n; i++)
target[i] = source[i] * i;
}
你不复制任何内存。当您将一个数组传递给此函数时,它会传递一个按值对数组的引用。
通常,Java 按值传递函数参数。但是对于数组和用户定义的类,您处理的对象始终是引用类型。因此,对类和数组的函数调用总是按值传递类/数组引用。
所以如果你有一个看起来像这样的类:
class Foo
{
int[] A; // For arguments say let's say this contains 1 million items always
}
你有一个可以调用它的函数:
static void Bar(Foo f)
{
....
}
它只传递对 Foo
的引用,它根本不复制数据。
关于Java - 访问数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8140428/