在 Java 中扩展数组的最有效方法?

(如果以前有人问过这个问题,请道歉 - 我不敢相信它没有,但我找不到一个。也许我的搜索力度很弱。

多年来,我“知道”Java没有本机函数来扩展数组(即每个元素乘以一个常量)。所以我一直在这样做:

for (int i=0; i<array.length; i++) {
  array[i] = array[i] * scaleFactor;
}

这实际上是最有效的方法吗(例如,在此应用程序中,它是大约10000个双精度的数组)?还是有更好的方法?


答案 1

对我来说看起来绝对没问题。我想不出更有效的方法。显然,尝试将代码放在一个地方,而不是将实际的代码放在所有地方,但除此之外,没有明显的问题。


答案 2

我能提供的唯一其他建议是懒惰地扩展,这样你只需支付访问每个元素的乘法成本;例如:

public class MyArray {
  private final double[] arr;
  private double scale = 1.0;

  public MyArray(double[] arr) {
    this.arr = arr;
  }

  public double getScale() {
    return scale;
  }

  public void setScale(double scale) {
    this.scale = scale;
  }

  public double elementAt(int i) {
    return arr[i] * scale;
  }
}

显然,这只在某些情况下更好:

  • 当您的阵列很大并且
  • 您只访问了几个元素,并且
  • 您通常访问这些元素一次。

在其他情况下,它是一种微优化,对现代CPU没有真正的好处。