本人一直有一个问题,如果要经常调用一个类的一些方法,例如工具类(自定义的Util),是定义一个引用变量来调用还是用不断的new 这个类来调用,哪个更加高效?举个例子吧。定义了一个矩阵类Matrix,调用转置,乘积等方法。两种使用方法:
class Matrix{
//返回两个矩阵的乘积C=A*B
public double[][] multiply(double[][] A,double[][] B){
.......
}
//返回矩阵A的转置矩阵A'
public double[][] transpose(double[][] A){
.......
}
//返回两个矩阵的和C=A+B
public double[][] add(double[][] A,double[][] B){
.......
}
}
现在要调用Matrix类计算矩阵A = X'*X+Y,其中X,Y是两个矩阵。
方法(一):
class Test{
public static void main(String[] args){
double[][] X = {.......};//输入X
double[][] Y = {.......};//输入Y
Matrix matrix = new Matrix();
double[][] xTrans = matrix.transpose(X);
double[][] temp = matrix.multiply(xTrans,X);
double[][] A = matrix.add(temp,Y);
double[][] C = matrix.multiply(X,Y);//如果还想计算C = X*Y
}
}
方法(二):
class Test{
public static void main(String[] args){
double[][] X = {.......};//输入X
double[][] Y = {.......};//输入Y
double[][] xTrans = new Matrix().transpose(X);
double[][] temp = new Matrix().multiply(xTrans,X);
double[][] A = new Matrix().add(temp,Y);
}
}
两种方法都可以吧,哪一种效率高呢?当然了,计算一次没有多大区别。如果计算X'*X+Y 是在一个循环中呢?还有一个问题是方法(一)中matrix调用了两次multiply以后是个什么状态?可能这个问题对于高手来说很简单,不吝赐教。
------解决方案--------------------
。。。。。。。。。。。
你的想法是对的,每new一个不但多消耗内存,而且多消耗时间,而且产生更多的垃圾,肯定是方法一效率高。
没啥本质区别,方法二只不过是每调用一个方法就多new出了一个对象,而方法一只使用一个对象而已。
不过在通常的开发中,工具类的方法一般都是声明为static,这样你就可以:类名.方法名()调用了,比你在不同的类里面都new一个对象出来效率高多了
------解决方案--------------------
------解决方案--------------------