我有这个数组:
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.为什么会发生此错误?这似乎是超级直接的。
谢谢!
答案 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()方法将对象添加到数组中