Java 返回数组与填充数组
我见过两种方法,它们的目标是返回一个值数组。第一个是最明显的:Java 返回数组与填充数组,java,arrays,methods,data-structures,return-value,Java,Arrays,Methods,Data Structures,Return Value,我见过两种方法,它们的目标是返回一个值数组。第一个是最明显的: public double[] getArray() { ... return ...; } 但是,我也看到了填充作为参数传递的数组的方法,例如AffineTransform.getMatrix(): 每种方法的优缺点是什么,在哪些情况下更可取?另外,使用第二种方法而不仅仅是第一种方法背后的逻辑是什么?第一种方法是更好的实践。第二种方法意味着您可以“变异”参数flatmatrix,因此无法确定该矩阵包含什么。现在,
public double[] getArray() {
...
return ...;
}
但是,我也看到了填充作为参数传递的数组的方法,例如AffineTransform.getMatrix()
:
每种方法的优缺点是什么,在哪些情况下更可取?另外,使用第二种方法而不仅仅是第一种方法背后的逻辑是什么?第一种方法是更好的实践。第二种方法意味着您可以“变异”参数flatmatrix,因此无法确定该矩阵包含什么。现在,如果这是期望的行为(改变数组),那么第二个更合适
我倾向于不改变参数,太容易出错。有两种观点 如果返回一个数组,则必须创建新的数组,这样会占用更多内存 如果将数组传递到方法中,则可以节省内存并提高性能(由于垃圾收集)。但它也违反了规则 对我来说,修改输入参数,尤其是数组是一种非常糟糕的做法。避免这种情况的最好方法是将此逻辑封装到另一个类中 有一些关于它的信息性问题:
public class Matrix {
public void setFromTransform(AffineTransform transform){
}
}
返回数组是一种很好的做法,这会增加更好的解耦 通过阵列的优点:
- 使用相同的数组并减少垃圾收集的负载
- 最重要:对于多线程应用程序,如果传递的数组与多个线程共享,那么我们需要使该数组同步,这将增加性能开销
- 更好的解耦,因为调用方只需获取返回的数组并对其进行处理
- 调用方不需要预处理,方法只返回结果数组(用一些固定值填充它,或者如果需要,将其置为空)
double[]矩阵=新的double[16];getMatrix(矩阵)代码>只有在您可以在后续调用中重新使用阵列时,它才会保存分配。感谢这些链接;如果我找到了他们,我可能就不会问我的问题了!内存节省逻辑是我所猜测的,但当我在仿射变换中发现这个方法时,我仍然觉得很奇怪。(一些io类也做同样的事情)这也使得我很难在JavaDoc中找到我想要的东西,因为我正在寻找一个返回double[]的方法,而不是找到void。如果你传递或返回一个对像数组这样的对象的引用,那么接收者可以修改原始对象。如果复制对象,则收件人无法修改原始对象。深度复制防止修改传递的实例引用的对象。这被称为“防御性复制”,通常在程序正确性和可维护性比微优化更重要的情况下更可取。
public class Matrix {
public void setFromTransform(AffineTransform transform){
}
}