gpt4 book ai didi

java - 将 ArrayList 添加到 ArrayList

转载 作者:行者123 更新时间:2023-11-30 03:53:21 24 4
gpt4 key购买 nike

从概念上讲,这里发生了什么?

我有一个ArrayList

ArrayList<SomeClass> myArray = new ArrayList<SomeClass>();

然后我像这样添加一些东西

myArray.add(new myArray(1, 2, 3));

最佳答案

I have an array

ArrayList myArray = new ArrayList();

不,你没有数组。数组使用括号 [] 声明,像这样:

int[] myArray;

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

then I add something to it like this

myArray.add(new myArray(1, 2, 3));

从概念上讲,这是错误的,甚至无法编译。如果你想在数组中添加多个值,你应该使用 ArrayList#addAll方法,接收另一个集合。那么,你有两种方法来传递 Collection在一份声明中:

  1. 使用 Arrays#asList 创建列表:

    myArray.addAll(Arrays.asList(1, 2, 3));
  2. 您可以使用双大括号初始化:

    myArray.addAll(new ArrayList() {{
    add(1);
    add(2);
    add(3);
    }});
<小时/>

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

ArrayList<Integer> myArray = new ArrayList<Integer>();
myArray.addAll(new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
}});

更多信息:

<小时/>

请注意,如果您有 ArrayList与自定义类相关联,比方说 ArrayList<SomeClass> myArrayList ,那么编译器会阻止您将未通过 IS-A 测试的元素添加到列表中(由 instanceof 运算符标记),因此以下代码:

ArrayList<SomeClass> myArrayList = new ArrayList<SomeClass>();
myArrayList..addAll(new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
}});

Integer 起将无法编译不是SomeClass 。与这段代码类似:

ArrayList<SomeClass> myArrayList = new ArrayList<SomeClass>();
myArray.add(Arrays.asList(1, 2, 3));

但是由于type erasure您可以使用原始类型来欺骗编译器。例如:

public void addData(ArrayList yourArrayList, Object anyData) {
yourArrayList.add(anyData);
}

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

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

它将打印:

[Hello world, 0]

关于java - 将 ArrayList 添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23837205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com