2014-02-16 25 views
4

我有一个具有指定最大容量M的ArrayList数组,我想通过填充零值来初始化该数组。因此,我使用以下代码:初始化ArrayList <Integer>的值为零 - Java

for(int i = 0; i < array.size(); i++) { 

    array.add(i, 0); 

} 

但是,这不起作用。我得到一个indexOutOfBoundsException:索引:0,大小:0

事实上,我在该循环之后打印数组以测试它是否填充了值但结果是空数组:[]。

显然,有一些重要的概念我不知道。我相信解决方案很简单,但我错过了这个概念的一些基本见解。

+1

对于'ArrayList'后,它的容量*和容量*之间存在差异。你应该通过文档来找出答案。 –

+0

将第二行更改为:'array.add(0);' – alfasin

+0

数组列表的参数类型是什么?显示其声明。 在你的情况下,如果它由整数组成,那么它应该如下: 列表 array = new ArrayList (); for循环将保持不变。 你也可以直接加上 array.add(0); – Crusaderpyro

回答

3

array.add(i, 0)更改为array.add(0);

除非ArrayList的大小大于或等于这些索引不存在,否则不能将其添加到这些指定索引。

此外,您还必须更改您的for循环,因为它的大小不是100;它是0.这是因为当你声明array = new ArrayList<Integer>(100)时,你只是指定应该为它保留多少内存 - 不是它的大小。它的大小仍然为0,只有在添加元素时才会增长。

+0

始终记住indexOutOfBoundsException指示某种类型的索引(例如数组,字符串或向量)超出范围。 – JavaFan

+0

@Trust是的,这正是我问这个问题时我不明白的地方。非常感谢您的帮助! – Kotsos

10

要使用100个零初始化一个ArrayList你这样做:

ArrayList<Integer> list = new ArrayList<Integer>(Collections.nCopies(100, 0)); 
+2

+1更优雅! – alfasin

2

您还可以通过这个代码榜上无名值设置为0,初始化数组列表

for (int i = 0; i < 60; i++) { 
    list.add(0); 
} 
+0

是的,这就是我在同事的评论后所做的事情!谢谢! – Kotsos