如果我有类似的话:
ArrayList<Data> mList = new ArrayList();
...
public void setList(ArrayList<Data> list) {
mList = list;
}
public void updateList(ArrayList<Data> list) {
mList.clear();
mList.addAll(list);
}
效率更高,setList()
或updateList()
为什么?什么是最佳做法?
编辑:
不要与this问题混淆。
答案 0 :(得分:11)
两者之间存在巨大的概念差异。
您的setList()
会引用一个列表;并更改你的mList ...指向该参考。
而updateList()
将来自传入列表的所有引用复制到现有的mList对象中。
含义:与updateList()相比,setList()确实需要更少的CPU操作......但关键是:现在可以从类外部更改mList。喜欢在:
List someList = ...
yourClass.setList(someList);
someList.clear();
将清除&#34;您的&#34; mList也是;但
List someList = ...
yourClass.updateList(someList);
someList.clear();
将不影响您的&#34; mList&#34;。
这是你应该注意的主要区别。
性能实际上并不是真正需要关注的问题!
一般情况下:不要过分担心性能问题。因为:无论如何你都不会把它弄好。例如,JIT编译器颠倒了天真的假设。
长话短说:专注于语义的运营;不要将自己限制在&#34;表现&#34;方面。
答案 1 :(得分:2)
setList()
在CPU时间方面效率更高,因为工作量减少。但是updateList()
可以说在开发人员时间更有效率,因为它不太可能导致错误。
在提高效率之前,您需要考虑正在做什么。有两个不同的列表可以在其他位置引用(并可能更改)。
示例:强>
使用setList()
允许外部代码以意想不到的方式修改代码。
List<Data> someData = Arrays.asList(new Data("a"), new Data("b");
setList(someData); // mList contains "a" & "b"
someData.clear(); // mList is now cleared
然而相比之下,updateList()
可以保护您免受意外的外部变化
List<Data> someData = Arrays.asList(new Data("a"), new Data("b");
updateList(someData); // mList contains "a" & "b"
someData.clear(); // mList still contains "a" & "b"
将列表传递给对象或从对象传递列表时,通常最好复制值。 CPU时间效率较低,但未来不太可能导致错误,因此开发人员和维护时间更有效。
答案 2 :(得分:-1)
setList更有效,因为你只传递一个引用。清除并在列表上添加迭代。
但是你必须小心并知道传递引用或重置列表之间的区别,并使用对你的解决方案有用的东西。