请问一下在java中的arrayList,为什么这么写就异常呢?

a1.add(2,new Bread(1, "荷叶", "小", "馒头"));
a1.add(1,new Bread(2, "飘香", "中", "蛋黄派"));
a1.add(0,new Bread(3, "巨无霸", "大", "汉堡包"));
按0,1,2来添加就没事,可是一调过来就异常,为什么呢?
代码:
public class Bread 
{
int num;
String brand;
String size;
String type;
public Bread(int num, String brand, String size, String type) {
super();
this.num = num;
this.brand = brand;
this.size = size;
this.type = type;
}

public String toString() {

return num+":"+brand+size+type;
}

}

import java.util.ArrayList;
import java.util.LinkedList;

public class Example {

public static void main(String[] args) 
{
LinkedList<Bread> a1=new LinkedList<Bread>();
a1.add(2,new Bread(1, "荷叶", "小", "馒头"));
a1.add(1,new Bread(2, "飘香", "中", "蛋黄派"));
a1.add(0,new Bread(3, "巨无霸", "大", "汉堡包"));

for(int j=0;j<a1.size();j++)
{
Bread ss=a1.get(j);

System.out.println(ss);

}

}

}

慕码人2483693
浏览 275回答 3
3回答

幕布斯6054654

add方法属于追加方法,就是向数组的尾部增加数据,但是用的是LinkList是可以头部增加数据的,使用方法addFirst(E element)就可以了。根据你的代码错误应该是这样的,一开始集合是长度是0,代表没有元素存在,那么这个下标为2的位置不存在,但是你却要这个位置后面增加数据,这样就错了,因为集合在这个时候还没有得到系统为下标为2的位置分配内存空间,程序执行的时候找不到这个为下标为2的位置,就是你增加的数据找不到地方摆,这样就错了。一般情况下就是使用add(E element)方法就可以了,这样add(int index, E element)方法的适合于在指定在某条数据后面追加数据(一般这条数据应该不是最后一条),就是说在这个集合里面我的数据已经填充好了,这个时候我要在其中的一条数据后面追加一条数据,那么我就用add(int index, E element)方法去追加数据,后面所存在数据就会被往后挤一个位置。

Cats萌萌

public void add(int index, E element) {if (index > size || index < 0)throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);ensureCapacity(size+1); // Increments modCount!!System.arraycopy(elementData, index, elementData, index + 1,size - index);elementData[index] = element;size++;}

Helenr

嗯,是这样的,我简单写了个代码重现了。ArrayList是数组List,它是逐次增加大小的,就是要从小到大添加元素,它维护元素的顺序。
打开App,查看更多内容
随时随地看视频慕课网APP