我有一个类型为我的模型的ArrayList,其中包含3个项目,即ArrayList的大小为3。
ArrayList<Model> mModels; // mModels.size() = 3
我需要将这个ArrayList复制到另一个ArrayList中,因此我创建了另一个与其类型相同的ArrayList,如下所示。
ArrayList<Model> localModels = new ArrayList<>(mModels.size());
下一步是将数据从成员变量复制到本地变量,因为我不想复制成员变量的引用,所以使用了Collections.copy()
Collections.copy(localModels,mModels);
但是我告诉目标大小应该大于源大小,却收到了ArrayOutOfBoundException。所以我记录了两个变量的大小。对于成员,我得到了大小为3,对于本地变量,记录的大小为0。
更新
我已经尝试将成员ArrayList复制到本地ArrayList,但它只复制了引用。是否有任何方法可以复制数据而不是引用?
我已经尝试了这些方法
//1
for(Model model: mModels){
localModels.add(model);
}
//2
for(Model model: mModels){
localModels.add((Model)model.clone());
}
//3
Collections.copy(localModels, mModels);
//4
localModels = (ArrayList<Model>)mModels.clone();
//5
localModels = new ArrayList<>(mModels);
我的问题是:
1- 如何将一个ArrayList的值复制到另一个ArrayList中(改变值不应该反映出来)?
2- 为什么Java/Android总是复制引用?
3- 如何初始化具有预定义大小的ArrayList(已经回答)
List<Integer> newList = new ArrayList<Integer>(oldList);
- BrockLee