创建临时引用还是重用?哪个更好?
Creating a temporary reference, vs reusing? which is better?
假设我有一个方法调用了多次(比如每次应用程序运行 10 次)。
我遍历一个列表,找到一个具有正确 ID 的元素,然后将该元素作为另一个方法的参数传递。
这个引用是我每次用新元素更新的 class 的字段(成员),还是我只是创建一个新的临时引用,这有什么区别吗?下面的代码示例
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);
}
在第二个示例中,Element
将在循环结束时超出范围,因此甚至无法编译。
您是否考虑过使用 Iterator
?
for(Iterator<Element> i = list.iterator(); i.hasNext(); ) {
if(i.next().getId() == searchID) {
i.remove();
}
}
没有并发修改错误,无需声明临时变量。
而且如果你保证List中最多只有一个searchID
(那为什么不使用Set
呢?),那么你可以通过在后面插入break;
来提早退出移除调用。
Premature optimization is the root of all evil - Donald Knuth
以上对你的情况意味着,除非你有令人信服的优化理由,否则不要考虑优化。
假设我有一个方法调用了多次(比如每次应用程序运行 10 次)。
我遍历一个列表,找到一个具有正确 ID 的元素,然后将该元素作为另一个方法的参数传递。
这个引用是我每次用新元素更新的 class 的字段(成员),还是我只是创建一个新的临时引用,这有什么区别吗?下面的代码示例
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);
}
在第二个示例中,Element
将在循环结束时超出范围,因此甚至无法编译。
您是否考虑过使用 Iterator
?
for(Iterator<Element> i = list.iterator(); i.hasNext(); ) {
if(i.next().getId() == searchID) {
i.remove();
}
}
没有并发修改错误,无需声明临时变量。
而且如果你保证List中最多只有一个searchID
(那为什么不使用Set
呢?),那么你可以通过在后面插入break;
来提早退出移除调用。
Premature optimization is the root of all evil - Donald Knuth
以上对你的情况意味着,除非你有令人信服的优化理由,否则不要考虑优化。