This question already has answers here:
list.clear() vs list = new ArrayList<Integer>(); [duplicate]
(8个答案)
Better practice to re-instantiate a List or invoke clear()
(4个答案)
3年前关闭。
如果我有类似的东西:
编辑:
不要与this问题混淆。
也会清除“您的” mList;但
不会影响您的“ mList”。
那是您应该意识到的主要区别。
性能实际上不是这里要关注的真正问题!
总的来说:不要太担心性能。因为:您无论如何都不会正确。例如,JIT编译器将天真的假设颠倒了。
长话短说:专注于操作的语义;不要将自己局限于“性能”方面。
(8个答案)
Better practice to re-instantiate a List or invoke clear()
(4个答案)
3年前关闭。
如果我有类似的东西:
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问题混淆。
最佳答案
两者之间存在巨大的概念差异。
您的setList()
引用列表。并更改您的mList ...以指向该参考。
而您的updateList()
将所有引用从传入列表复制到现有的mList对象中。
含义:与updateList()相比,setList()确实需要较少的CPU操作...但是关键是:现在可以从您的类外部更改mList。像:
List someList = ...
yourClass.setList(someList);
someList.clear();
也会清除“您的” mList;但
List someList = ...
yourClass.updateList(someList);
someList.clear();
不会影响您的“ mList”。
那是您应该意识到的主要区别。
性能实际上不是这里要关注的真正问题!
总的来说:不要太担心性能。因为:您无论如何都不会正确。例如,JIT编译器将天真的假设颠倒了。
长话短说:专注于操作的语义;不要将自己局限于“性能”方面。
关于java - Android list (ArrayList,List等):addAll()与重新定义引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37549285/
10-10 16:54