首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向ArrayList添加ArrayList

向ArrayList添加ArrayList
EN

Stack Overflow用户
提问于 2014-05-23 19:37:33
回答 4查看 265关注 0票数 1

从概念上讲,这是怎么回事?

我有一个ArrayList

代码语言:javascript
复制
ArrayList<SomeClass> myArray = new ArrayList<SomeClass>();

然后我在上面添加了这样的东西

代码语言:javascript
复制
myArray.add(new myArray(1, 2, 3));
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-23 19:39:30

我有一个数组 ArrayList myArray =新ArrayList();

不,你没有数组。数组是使用brackes []声明的,如下所示:

代码语言:javascript
复制
int[] myArray;

您有一个ArrayList类的对象。该对象将在内部使用数组来存储数据,并在需要分配更多值时动态地更改较新的数组。

然后我在上面添加了这样的东西 MyArray.add(新myArray(1,2,3));

从概念上讲,这是错误的,甚至不会编译。如果要在数组中添加多个值,则应使用接收另一个集合的ArrayList#addAll方法。然后,有两种方法可以在一条语句中传递Collection

  1. 使用Arrays#asList创建一个列表: myArray.addAll(Arrays.asList(1,2,3));
  2. 您可以使用双大括号初始化: MyArray.addAll(新的ArrayList() {{ add(1);add(2);add(3);});

您应该考虑到应该为您的ArrayList指定泛型,而不是使用原始数据:

代码语言:javascript
复制
ArrayList<Integer> myArray = new ArrayList<Integer>();
myArray.addAll(new ArrayList<Integer>() {{
        add(1);
        add(2);
        add(3);
    }});

更多信息:

请注意,如果您有一个绑定到自定义类的ArrayList,假设是ArrayList<SomeClass> myArrayList,那么编译器将阻止您将元素添加到没有通过IS-A测试的列表中(由instanceof操作符注意到),因此代码如下:

代码语言:javascript
复制
ArrayList<SomeClass> myArrayList = new ArrayList<SomeClass>();
myArrayList..addAll(new ArrayList<Integer>() {{
        add(1);
        add(2);
        add(3);
    }});

因为Integer不是SomeClass,所以无法编译。类似于这段代码:

代码语言:javascript
复制
ArrayList<SomeClass> myArrayList = new ArrayList<SomeClass>();
myArray.add(Arrays.asList(1, 2, 3));

但是由于使用了类型擦除,您可以使用原始类型来欺骗编译器。例如:

代码语言:javascript
复制
public void addData(ArrayList yourArrayList, Object anyData) {
    yourArrayList.add(anyData);
}

然后在代码中调用此方法:

代码语言:javascript
复制
ArrayList<String> myArrayList = new ArrayList<String>(); //allows Strings only
myArrayList.add("Hello world");
//myArrayList.add(0); //this won't compile because trying to add an Integer
addData(myArrayList, 0); //this will compile for using raw ArrayList and sending an Integer
System.out.println(myArrayList);

它将印刷:

代码语言:javascript
复制
[Hello world, 0]
票数 3
EN

Stack Overflow用户

发布于 2014-05-23 19:40:54

代码语言:javascript
复制
myArray.add(new myArray(1, 2, 3));

这是不正确的,也不编译,因为myArray不是一个类型,它只是一个引用,您需要一些类型的整数,或者如果您想要添加另一个列表,然后使用addAll

你可以用这样的东西。

代码语言:javascript
复制
List<Integer> myArray = new ArrayList<>(); // specify with generics type parameter
//do some things and then
myArray.addAll(Arrays.asList(1,2,3)); // use this helper method to add a list to another list

或者,如果您只想创建和填充它,只需使用

代码语言:javascript
复制
List<Integer> myArray = Arrays.asList(1,2,3,4,5);
票数 0
EN

Stack Overflow用户

发布于 2014-05-23 19:48:21

我想我知道你想做什么,说你有这个。

代码语言:javascript
复制
ArrayList<Integer[]> myArray = new ArrayList<Integer[]>();

如果你想给它添加一个数组,你就可以调用

代码语言:javascript
复制
myArray.add(((Integer[]) new int[] { 0, 1, 2 }));

它将将数组0、1、2添加到ArrayList的下一个索引中。

对于exmaple,以下代码

代码语言:javascript
复制
ArrayList<Integer[]> myArray = new ArrayList<Integer[]>();
myArray.add(((Integer[]) new int[] { 0, 1, 2 }));
myArray.add(((Integer[]) new int[] { 1, 0, 2 }));
myArray.add(((Integer[]) new int[] { 3, 2, 1 }));

将产生以下结果:

代码语言:javascript
复制
myArray index 0 = [0, 1, 2]
myArray index 1 = [1, 0, 2]
myArray index 2 = [3, 2, 1]

这是你的问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23837205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档