Java ArrayList未使用预定义的大小初始化
我有一个类型为my model的ArrayList,它包含3项,即ArrayList大小为3Java ArrayList未使用预定义的大小初始化,java,android,arraylist,Java,Android,Arraylist,我有一个类型为my model的ArrayList,它包含3项,即ArrayList大小为3 ArrayList<Model> mModels; // mModels.size() = 3 但通过告诉目标大小应该大于源大小,我得到了BoundException的排列。所以我记录了两个变量的大小。然后,对于成员,我得到的大小为3,对于localVariable,记录的大小为0 更新 我还试着将成员ArrayList复制到本地一个。但它只复制参考资料。有没有办法复制数据而不是引用 我试
ArrayList<Model> mModels; // mModels.size() = 3
但通过告诉目标大小应该大于源大小,我得到了BoundException的排列。所以我记录了两个变量的大小。然后,对于成员,我得到的大小为3,对于localVariable,记录的大小为0
更新
我还试着将成员ArrayList复制到本地一个。但它只复制参考资料。有没有办法复制数据而不是引用
我试过这些方法
//1
对于(模型:mModels){
添加(模型);
}
//2
对于(模型:mModels){
添加((Model)Model.clone());
}
//3
Collections.copy(localModels、mmodel);
//4
localModels=(ArrayList)mModels.clone();
//5
localModels=新的ArrayList(mModels);
所以我的问题是
1-如何将(值更改不应反映)值从一个ArrayList复制到另一个ArrayList
2-为什么java/android总是复制引用
3-如何使用预定义大小初始化ArrayList(已回答)
这将为您提供原始
ArrayList
的浅拷贝。您可以使用其构造函数直接复制ArrayList:
ArrayList<Model> localModels = new ArrayList<>(mModels);
arraylistlocalmodels=新的ArrayList(mModels);
这样就不需要使用Collections.copy。数组列表具有动态大小,因此不需要使用预定义的大小对其进行初始化。只需使用ArrayList.addall()将一个列表对象的内容添加到另一个列表对象中即可
请参阅此处的文档-最终我找到了答案: 我必须将模型中的每个字段分别复制到第二个ArrayList 像
arraylistlocalmodels=newarraylist(mModels.size());
用于(模型:mModels){
Models tempModel=新模型();
setId(model.getId());
tempModel.setName(model.getName());
....
....
添加(tempModel);
}
返回localModels();
这是将一个ArrayList中的内容复制到另一个ArrayList的方法。有问题的任何其他方法都将只复制引用它只复制引用,如果我更改localModels中的any字段,它也会影响成员的集合。copy也会这样做。它不知道如何深入复制列表的内容。如果我更改了localModels中的值,它会影响MModel吗?@robodev如果您添加或删除
localModels
中的元素,它不会影响MModel
。但是,如果您更改了localModels
中某个元素的状态,该更改将反映在mModels
中,因为这两个列表都包含对相同对象的引用。是否有任何方法可以为局部变量获取单独的内存位置?看看这个问题:或者这是我的错,如果要从arraylist复制arraylist,只需执行List newList=newArrayList(oldList)代码>@Sotirios如何将此qn标记为重复。你提出的问题和这个完全不同。你似乎把初始容量和大小混淆了。这是两件不同的事情。您试图将三个元素复制到一个没有三个元素的列表中。@SotiriosDelimanolis实际上我在发布这个问题之前读过这个问题。我发布这个问题只是因为它不属于我的情况。如果你认为链接中的帖子不能回答你的问题,请编辑你的问题,解释你为什么这么认为。
Collections.copy(localModels,mModels);
//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);
ArrayList<Model> localModels = new ArrayList<>(mModels.size());
ArrayList<Model> localModels = new ArrayList<>(mModels);
ArrayList<Model> localModels = new ArrayList<>(mModels);
ArrayList<Model> localModels = new ArrayList<>(mModels.size());
for(Model model: mModels){
Models tempModel = new Model();
tempModel.setId(model.getId());
tempModel.setName(model.getName());
....
....
localModels.add(tempModel);
}
return localModels();