我有一个列表,用于 Android 中 ListView 的适配器。
大多数时候,List 用于读取,但有时需要替换所有 List 内容。
以下哪种类型的代码(replaceListA、replaceListB)是首选?或另一种替换列表的方法?
提前致谢。
private ArrayList<Model> list = new ArrayList<Model>();
public synchronized void replaceListA(List newList) {
list.clear();
list.addAll(newList);
}
public synchronized void replaceListB(List newList) {
list = newList;
}
一般来说,replaceListB
可能会跑得更快,但是如果以后修改newList
,list
也会改变。例如:
ArrayList<Model> newList = new ArrayList<Model>();
replaceListB(newList);
newList.add( /*something*/ ); //This will update both newList and list
对比
ArrayList<Model> newList = new ArrayList<Model>();
replaceListA(newList);
newList.add( /*something*/ ); //This will only update newList
更具体地说,replaceListB
将在固定时间内运行,因为它只是更改一个指针,其中 replaceListA
必须复制单独列出,因此如果列表很大,则需要很长时间。但是,根据垃圾收集器的详细信息,replaceListA
可能会更快地释放内存。无论哪种方式,除非列表非常大,否则不太可能产生重大差异,因此我建议根据您是要制作列表的单独副本 (replaceListA
) 还是允许编辑 ( replaceListB
).