如果可能的话,传递引用或使用硬编码对象更好吗
是否值得编写更好的代码(ClassB),而不是使用两种单独的检查方法?所以主要的问题是:假设类A比类B快一点,我是对的,还是它的差异并不重要,传递变量(在这种情况下是列表)并不会真正影响生产率,即使这些列表每个都有1000个对象?抱歉,如果这个问题是愚蠢的
public class ClassA implements Runnable {
ArrayList<Obj> list1;
ArrayList<Obj> list2;
boolean checkList1() {
for (Obj str : list1) {
if (str.check()) {
return true;
}
}
return false;
}
boolean checkList2() {
for (Obj str : list2) {
if (str.check()) {
return true;
}
}
return false;
}
@Override
public void run() {
checkList1();
checkList2();
}
}
或者
public class ClassB implements Runnable {
ArrayList<Obj> list1;
ArrayList<Obj> list2;
boolean checkAnyList(ArrayList<Obj> list) {
for (Obj str : list) {
if (str.check()) {
return true;
}
}
return false;
}
@Override
public void run() {
checkAnyList(list1);
checkAnyList(list2);
}
}
# 1 楼答案
最后,你应该测量一下。为此,可以使用高精度计时器,如
System.nanoTime()
不用测量,我更喜欢B级。下面的问题让classB更有趣
等我得到真正的数字
# 2 楼答案
你可以自己测试,但最终差别几乎是不存在的,所以我会选择更容易阅读和维护的版本(我认为是版本2)
从Java 8开始,也可能是这样的:
由于重构不需要更改多个谓词,一个可能更好的变体可能是: