添加项目时的Java ArrayList OutofBounds

时间:2012-03-12 18:59:36

标签: java arraylist

我有这个数组:

ArrayList<Problem> problems = new ArrayList <Problem>( 100 );

然后我尝试将一个对象放入其中:

Problem p = new Problem ();
p.setProblemName( "Some text" );

然后我尝试将对象添加到数组中:

problems.set(1, p);

但此时系统会抛出运行时异常:

03-12 18:58:04.573: E/AndroidRuntime(813): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0

但是,如果我将数组的初始大小增加到100.为什么会发生此错误?这似乎是超级直接的。

谢谢!

5 个答案:

答案 0 :(得分:2)

ArrayList#set()

抛出: IndexOutOfBoundsException - 如果索引超出范围(index < 0 || index >= size())

size()返回数组列表中的元素数,而不是容量。

答案 1 :(得分:2)

您不会使用set添加到ArrayList,而是使用它来覆盖现有元素。

problems.set(1, p); //Overwrite the element at position 1 

您使用add

problems.add(p); 

将在最后添加

problems.add(1, p);

将它添加到索引1,这将抛出一个IndexOutOfBoundsException,用于索引&lt; 0或索引&gt; ArrayList.size()。在第一次尝试添加时会出现这种情况。

也仅为了您的知识

problems.add(ArrayList.size(), p); //Works the same as problems.add(p);

答案 2 :(得分:1)

当您编写ArrayList<Problem> problems = new ArrayList <Problem>( 100 );时,您只告诉Java您认为您将使用这种容量(这会优化底层数组的大小),但列表的大小仍为0。

您需要使用add()

problems.add(p);

将在第一个位置添加p。

List<Problem> problems = new ArrayList <Problem>();
Problem p = new Problem ();
p.setProblemName( "Some text" );

problems.add(p);

Problem p2 = problems.get(0); //p2 == p

答案 3 :(得分:0)

你应该写这个:

problems.add(0, p);

您没有想要将p插入第一名的第0个成员!

答案 4 :(得分:-1)

problems.set(0, p); 

数组中的第一个位置始终为0.

编辑你应该使用.add()方法将对象添加到数组中