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年前关闭。
            
        

如果我有类似的东西:

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