假设我有一个多次调用的方法(比如每个应用程序运行10个adverage)。
我遍历一个列表,找到一个具有正确ID的元素,然后将该元素作为另一个方法的参数传递。
这个引用是否是每次使用new元素更新的类的字段(成员),或者我是否只是创建一个新的临时引用,这有什么区别吗?下面的代码示例
for (element e : list) {
if (e.getID() == searchID) {
//reassigning value of the reference in the class
mElementToRemove = e;
break;
}
}
list.remove(mElementToRemove);
VS
for (element e : list) {
if (e.getID() == searchID) {
//(new reference)
Element mElementToRemove = e;
break;
}
}
list.remove(mElementToRemove);
或许没有区别哪个是更好的风格或哪个更高效?
谢谢!
*编辑。我输错了底部的例子。对于完整的上下文,我的意思是:
private void removeThisId(int searchID) {
Element ElementToRemove = e;
for (element e : list) {
if (e.getID() == searchID) {
//(new reference)
mElementToRemove = e;
break;
}
}
list.remove(mElementToRemove);
}
答案 0 :(得分:1)
在第二个例子中,Element
将在循环结束时超出范围,因此甚至不会编译。
您是否考虑过使用Iterator
?
for(Iterator<Element> i = list.iterator(); i.hasNext(); ) {
if(i.next().getId() == searchID) {
i.remove();
}
}
没有并发修改错误,不必声明临时变量。
如果您保证列表中最多只有一个searchID
(为什么不使用Set
呢?),那么您可以在删除后插入break;
提前退出调用
答案 1 :(得分:0)
Premature optimization is the root of all evil - Donald Knuth
在您的情况下,上述意味着,除非您有令人信服的理由进行优化,否则请不要考虑优化。