Java - 访问数组的有效方法

Chr*_*ris 1 java performance pass-by-reference data-structures

自从我上次用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
}
Run Code Online (Sandbox Code Playgroud)

所以,现在我需要在Java中重新编码这个函数 - 有效.我的问题是:

  • Java当然没有指针,所以我如何有效地传递数组,而不会因为按值调用而进行大量的内存复制操作
  • 哪种数据结构最适合存储数组

请注意,源和目标是大型数组,最多可存储100万个元素

Mik*_*ley 6

在Java中,它几乎是一样的:

static void update(double[] source, double[] target, int n)
{
    for (int i = 0; i < n; i++)
        target[i] = source[i] * i;
}
Run Code Online (Sandbox Code Playgroud)

你不复制任何内存.将数组传递给此函数时,它会按值传递对数组引用.

通常,Java按值传递函数参数.但是对于数组和用户定义的类,您正在处理的对象始终是引用类型.因此,对类和数组的函数调用总是按值传递类/数组引用.

所以如果你有一个看起来像这样的类:

class Foo
{
  int[] A; // For arguments say let's say this contains 1 million items always
}
Run Code Online (Sandbox Code Playgroud)

你有一个可以调用的功能:

static void Bar(Foo f)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

它只传递引用Foo,它根本不会复制数据.