Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList未使用预定义的大小初始化_Java_Android_Arraylist - Fatal编程技术网

Java ArrayList未使用预定义的大小初始化

Java ArrayList未使用预定义的大小初始化,java,android,arraylist,Java,Android,Arraylist,我有一个类型为my model的ArrayList,它包含3项,即ArrayList大小为3 ArrayList<Model> mModels; // mModels.size() = 3 但通过告诉目标大小应该大于源大小,我得到了BoundException的排列。所以我记录了两个变量的大小。然后,对于成员,我得到的大小为3,对于localVariable,记录的大小为0 更新 我还试着将成员ArrayList复制到本地一个。但它只复制参考资料。有没有办法复制数据而不是引用 我试

我有一个类型为my model的ArrayList,它包含3项,即ArrayList大小为3

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();