【问题标题】:how to copy one arrayList to another without refrencing first?如何在不先引用的情况下将一个arrayList复制到另一个?
【发布时间】:2017-06-20 15:43:51
【问题描述】:

我尝试了所有方法,但总是引用前一个。

mListPreviousData = new ArrayList<>();
for (int i = 0; i < mAddedList.size(); i++) {
    mListPreviousData.add(mAddedList.get(i));
}

【问题讨论】:

  • 只做 mListPreviousData = (ArrayList) mAddedList.clone();您需要转换为您的数组列表类型
  • 两个arrayList的类型相同,这就是它引用前一个的原因
  • 您可以使用this 库或通过构造函数获取shallow 副本。
  • 如果您不想通过克隆列表对象来创建两个单独的列表,那么您需要在循环中每次创建数据列表项,然后添加到您的 mListPreviousData 列表中。意味着您需要创建新的对象每次。

标签: android arraylist copy


【解决方案1】:
mListPreviousData = new ArrayList<>(); 
mListPreviousData.addAll(mAddedList);

【讨论】:

  • 请为您的答案提供具体的正文,以便更好地理解。
【解决方案2】:

您需要制作底层对象的深层副本:

mListPreviousData = new ArrayList<>();
for (int i = 0; i < mAddedList.size(); i++) {
    mListPreviousData.add(mAddedList.get(i).clone());
}

最好实现自己的clone() 方法。

编辑:

或者对整个arraylist做一个深拷贝:

mListPreviousData = (..cast to your type..) mAddedList.clone();

【讨论】:

  • 缺点如果更改了原始列表数据,克隆的副本将自动更新
  • 同样的事情我不想要我需要两个单独的列表。
  • 如果您不想通过克隆列表对象来创建两个单独的列表,那么您需要在循环中每次创建数据列表项,然后添加到您的 mListPreviousData 列表中。意味着您需要创建新的每次对象
猜你喜欢
  • 2017-12-30
  • 2020-10-13
  • 1970-01-01
  • 2018-07-21
  • 2017-11-24
  • 2012-01-16
  • 2020-11-16
  • 2017-05-14
  • 2023-02-08
相关资源
最近更新 更多