Java 用零初始化arrayList

Java 用零初始化arrayList,java,arraylist,initialization,Java,Arraylist,Initialization,我正在创建一个ArrayList,它的大小是40 ArrayList<Integer> myList= new ArrayList<>(40); 但我明白了 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 使用。改为添加(0)。构造函数设置初始容量,但不设置初始项。所以您的列表仍然是空的。您可以使用方法将列表填充为零。在您的情况下,此处设置的40不是列表的长度,而是初始容量。您可以使用数组构建包含所有零的列

我正在创建一个
ArrayList
,它的大小是
40

ArrayList<Integer> myList= new ArrayList<>(40);
但我明白了

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
使用
。改为添加(0)
。构造函数设置初始容量,但不设置初始项。所以您的列表仍然是空的。

您可以使用方法将列表填充为零。在您的情况下,此处设置的
40
不是列表的长度,而是初始容量。您可以使用数组构建包含所有零的列表。签出下面的代码

ArrayList<Integer> myList= new ArrayList<>(Arrays.asList(new Integer[40]));
Collections.fill(myList, 0);//fills all 40 entries with 0"
System.out.println(myList);

在那里,您可以添加而不是设置<代码>我的列表。添加将起作用。只有在该特定索引上已经存在条目时,才能进行设置
set
方法仅替换该索引中存在的内容。

尝试
Collections.nCopies()

ArrayList myList=新的ArrayList(Collections.nCopies(40,0));
或:

List myList=Collections.nCopies(40,0);
请参见Java 8实现:

ArrayList<Integer> list = IntStream.of(new int[40])
                    .boxed()
                    .collect(Collectors.toList());
ArrayList list=IntStream.of(新的int[40])
.boxed()
.collect(Collectors.toList());

请注意
Arrays.asList(new int[40])
返回
List
因此您上面的语句将给出编译时错误。我认为这更合适+1很好的一个例子。请注意,第二个示例返回一个不可变列表-这可能就是为什么它应该像第一个示例中所示那样包装在ArrayList中。
Collections.nCopies
更好
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
ArrayList<Integer> myList = new ArrayList<Integer>(Collections.nCopies(40, 0));
List<Integer> myList = Collections.nCopies(40, 0);
ArrayList<Integer> list = IntStream.of(new int[40])
                    .boxed()
                    .collect(Collectors.toList());