ArrayList未使用预定义大小进行初始化

时间:2015-09-28 13:46:47

标签: java android arraylist

我有一个类型为my model的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,而localVariable则将大小记录为0.

更新

我尝试将成员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复制(值更改不应该反映)值到另一个?

2-为什么java / android总是复制引用

3- 如何初始化具有预定义大小的ArrayList (已经回答)

4 个答案:

答案 0 :(得分:5)

ArrayList<Model> localModels = new ArrayList<>(mModels.size());

创建一个ArrayList,其初始容量等于mModels.size()(在您的示例中为3),但它包含0个元素。

您必须向ArrayList添加元素才能拥有正数的元素。

如果您希望localModels ArrayList包含与mModels相同的元素,可以使用以下内容对其进行初始化:

ArrayList<Model> localModels = new ArrayList<>(mModels); 

这将为您提供原始ArrayList的浅表副本。

答案 1 :(得分:1)

您可以使用其构造函数直接复制ArrayList:

ArrayList<Model> localModels = new ArrayList<>(mModels);

然后就不需要使用Collections.copy。

答案 2 :(得分:0)

最后我找到了答案:

我必须将模型中的每个字段分别复制到第二个ArrayList

喜欢

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

这是将一个ArrayList中的内容复制到另一个ArrayList的方法。发布的任何其他方法仅复制参考

答案 3 :(得分:-1)

数组列表具有动态大小,因此您无需使用预定义的大小对其进行初始化。您可以使用ArrayList.addall()将一个List对象的内容添加到另一个。

请在此处查看文档 - http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#addAll(java.util.Collection)