Java - 访问数组的有效方法

标签 java performance data-structures pass-by-reference

自从我上次用 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/

相关文章:

java - Java中对对象进行垃圾回收的方法

python - 单进程代码执行速度比多进程代码快 - MCVE

algorithm - 高效的出租车调度

c - 从队列中弹出时 C 中的段错误

java - 提交后使用托管 Bean 模式读取/写入 XPage

java - 正则表达式替换java中查询参数中的值

java - 将多边形转换为边界框数组

performance - MongoDB高效处理嵌入式文档

python - 为什么 numpy 的 einsum 比 numpy 的内置函数慢?

用于存储国际象棋走法的 Java 结构