返回数组与填充数组

时间:2017-02-20 15:08:27

标签: java arrays methods data-structures return-value

我见过两种一般类型的方法,其目标是返回一组值。第一个是最明显的:

public double[] getArray() {
    ...
    return ...;
}

但是,我也看到了填充作为参数传递的数组的方法,例如AffineTransform.getMatrix()

public void getMatrix(double[] flatmatrix) {
    ...
    flatmatrix[0] = ...;
    ....
}

每种方法的优缺点是什么,哪种情况更可取?另外,使用第二种方法背后的逻辑是什么,而不仅仅是使用第一种方法?

4 个答案:

答案 0 :(得分:1)

第一种方法是更好的做法。第二种方法意味着你可以“改变”参数flatmatrix,因此不能确定该矩阵是什么。现在,如果这是所需的行为(改变数组),那么第二个更合适。

我倾向于不改变参数,太容易出错。

答案 1 :(得分:1)

有两种意见。

如果你返回一个数组 - 你必须创建一个新数组,因此你会花更多的内存。

如果将数组传递给方法 - 可以节省内存并提高性能(由于垃圾收集)。但它也违反了Pure Function规则。

对我来说,修改输入参数,特别是数组是一种非常糟糕的做法。避免它的最好方法是将这个逻辑封装到另一个类中。

有一些关于它的信息性问题:

答案 2 :(得分:1)

矩阵方法更喜欢修改数组的原因是它们经常用于图形和绘制调用。这些编写方式允许重用数组。

最好不要在正在调用的绘图例程中导致分配,每秒60次。当发生这种情况时,它会导致更频繁的垃圾收集,这可能会触发暂停,用户可以看到一些丢帧。

就个人而言,除非出于性能原因,否则我不会复制第二种技术。

如果我决定重用并改变一个对象,我会通过该对象上的方法(OO样式)而不是修改输入的过程样式方法来实现。 e.g。

public class Matrix {
    public void setFromTransform(AffineTransform transform){
    }
}

答案 3 :(得分:0)

返回数组是一个好习惯,这会增加更好的解耦。

传递数组的好处:

  • 使用相同的数组并减少垃圾回收的负担

传递数组的缺点:

  • 最重要:如果多线程应用程序如果传递的数组与多个线程共享,那么我们需要使这个数组同步,这会增加性能开销

返回数组的优点:

  • 更好的解耦,因为调用者必须获取返回的数组并处理它
  • 调用者不需要预处理,方法只返回结果数组(用一些固定值填充它或者如果需要则将其设为空)