Android列表(ArrayList,List等):addAll()vs重新定义引用

You*_*ode 0 java performance android list arraylist

如果我有类似的东西:

ArrayList<Data> mList = new ArrayList();

...

public void setList(ArrayList<Data> list) {
    mList = list;
}


public void updateList(ArrayList<Data> list) {
    mList.clear();
    mList.addAll(list);
}
Run Code Online (Sandbox Code Playgroud)

哪个更有效,setList()或者updateList()为什么?什么是最佳做法?

编辑:

不要混淆这个问题.

Gho*_*ica 11

两者之间存在巨大的概念差异.

setList()参考了一个清单; 并更改你的mList ...指向该参考.

而您updateList()将传入列表中的所有引用复制到现有的mList对象中.

含义:与updateList()相比,setList()确实需要更少的CPU操作......但关键是:现在可以从类外部更改mList.像:

List someList = ...
yourClass.setList(someList);
someList.clear();
Run Code Online (Sandbox Code Playgroud)

将清除"你的"mList; 但

List someList = ...
yourClass.updateList(someList);
someList.clear();
Run Code Online (Sandbox Code Playgroud)

不会影响到你的"mList".

这是你应该注意的主要区别.

性能实际上并不是这里需要关注的真正问题!

一般来说:不要过分担心性能.因为:无论如何你都不会把它弄好.例如,JIT编译器颠倒了天真的假设.

长话短说:关注操作的语义 ; 不要将自己局限于"表现"方面.