gpt4 book ai didi

java - Android列表(ArrayList、List等): addAll() vs redefining reference

转载 作者:行者123 更新时间:2023-12-01 06:34:32 26 4
gpt4 key购买 nike

如果我有类似的东西:

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列表(ArrayList、List等): addAll() vs redefining reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37549285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com