A类
Class A {
public HashMap <Integer,Double> myHashMap;
public A(){
myHashMap = new HashMap()
}
}
B级
Class B {
private A anInstanceOfA;
public B(A a) {
this.anInstanceOfA = a;
}
aMethod(){
anInstanceOfA.myHashMap.get(1); <--getting hashmap value for key = 1
//proceed to use this value, but instead of storing it to a variable
// I use anInstanceOfA.myHashMap.get(1) each time I need that value.
}
在aMethod()
中,我使用anInstanceOfA.myHashMap.get(1)
获取key = 1
的值。我在aMethod()
中多次这样做,我想知道多次使用anInstanceOfA.myHashMap.get(1)
之间的效率是否有任何差异,或者只是将其分配给变量并多次使用指定的变量。
即
aMethod(){
theValue = anInstanceOfA.myHashMap.get(1);
//proceed to use theValue in my calculations. Is there a difference in efficiency?
}
答案 0 :(得分:4)
理论上,JVM可以将差异优化得非常小(与程序的其余部分相比)。但是我更喜欢把它变成局部变量,因为我相信它会使代码更清晰(因为我可以给它一个有意义的名字)
我建议你做你认为更简单,更清晰的事情,除非你已经衡量了绩效差异。
答案 1 :(得分:2)
问题似乎是你想知道多次调用get(l)而不是一次调用是否更昂贵。
答案是肯定的。问题是它是否足够重要。明确的答案是通过分析来询问JVM。但是,您可以通过查看所选实现中的get方法进行猜测,并考虑是否要每次都执行所有操作。
请注意,还有另一个原因是您可能希望将值放在变量中,即您可以为其指定一个名称,从而使您的程序在将来更容易维护。
答案 2 :(得分:0)
这似乎是一种微观优化,在事物的方案中确实没有太大的区别。
正如@peter已经建议的那样,“优化”样式/可读性是选择第二个选项而不是第一个选项的更好理由。如果您真的进行了大量的通话,或者如果通话非常昂贵,那么优化速度只会开始有意义 - 在您当前的示例中可能都不是这样。
答案 3 :(得分:0)
将其置于局部变量中,原因有多种:
get
个来电之一,但忘记更改其他电话,则可能会在以后的维护期间收到错误。每当您复制代码时,这都是一个问题。使用局部变量可以最大限度地降低这种风险。