我班上有这两种方法。第二种方法做同样的事情,但对于成千上万的多个值(比如五万)。那么哪一个更好: 的修改
public static int isUsed(int num) {
if((port < startPort || port > endPort)) {
throw new IllegalArgumentException();
}
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(port);
serverSocket.close();
return false;
} catch (IOException e) {
return true;
}
}
public static int areAllUsed(int arr[]) {
//do the same thing several thousand times >>> Is thisbetters OR
// call isUsed several thousand times >>> this is better
}
更好的意思是记忆或表现。
答案 0 :(得分:4)
如果需要在多个位置重用一段逻辑,定义一个函数是重用代码的最佳方法。在另一个地方复制粘贴相同的逻辑并不是一个好主意,因为它会降低可读性,并在您必须更改逻辑时成为维护责任。
很少或没有性能影响,因为如果Java编译器发现它有用,它会自动内联静态方法。
答案 1 :(得分:2)
DRY就是答案:不要重复自己。
如果您已在isUsed()
中编码了算法,则不要在其他方法中重新实现它。致电isUsed()
。
JVM的效率足以使差异可以忽略不计,甚至不存在,因为isUsed()
方法将由JIT动态内联到areAllUsed()
。
答案 2 :(得分:2)
在这种情况下,方法调用很可能与性能角度没有区别。对于一个小的方法,JIT编译器很可能会在调用它时内联方法体。 (请注意,对于非静态最终方法,它可以执行相同的操作,甚至在某些情况下也可以使用非静态,非最终方法。)
内存使用量的差异是微不足道的。
无论哪种方式,尝试再次猜测编译器/优化器通常都是一个坏主意。最好将代码编写为可读和可维护,并让优化器处理优化。如果性能是一个真正的问题,那么使用真实/真实的输入数据 profile 您完成的代码......并使用您的分析结果来确定您应该在哪里指导您的工作。
答案 3 :(得分:0)
这取决于您的申请。我会建议多次使用电话。代码越不线性,如果出现问题,调试就越容易。如果出现问题,您只需要检查isUsed是否有错误。