java中的arrayList,为什么这么写就异常呢?

a1.add(2,newBread(1,"荷叶","小","馒头"));a1.add(1,newBread(2,"飘香","中","蛋黄派"));a1.add(0,new... 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);

}

}

}
展开
 我来答
chl282117017
2011-12-27
知道答主
回答量:4
采纳率:0%
帮助的人:2.8万
展开全部
add方法属于追加方法,就是向数组的尾部增加数据,但是用的是LinkList是可以头部增加数据的,使用方法addFirst(E element)就可以了。根据你的代码错误应该是这样的,一开始集合是长度是0,代表没有元素存在,那么这个下标为2的位置不存在,但是你却要这个位置后面增加数据,这样就错了,因为集合在这个时候还没有得到系统为下标为2的位置分配内存空间,程序执行的时候找不到这个为下标为2的位置,就是你增加的数据找不到地方摆,这样就错了。一般情况下就是使用add(E element)方法就可以了,这样add(int index, E element)方法的适合于在指定在某条数据后面追加数据(一般这条数据应该不是最后一条),就是说在这个集合里面我的数据已经填充好了,这个时候我要在其中的一条数据后面追加一条数据,那么我就用add(int index, E element)方法去追加数据,后面所存在数据就会被往后挤一个位置。以上就是我使用的心得,有不同观点可以追问,欢迎与我交流。
jy00867302
2011-12-25 · 超过31用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:91.9万
展开全部
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++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dengke0624
2011-12-26 · 超过12用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:28.3万
展开全部
嗯,是这样的,我简单写了个代码重现了。ArrayList是数组List,它是逐次增加大小的,就是要从小到大添加元素,它维护元素的顺序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
waykingchanglu
2011-12-26 · TA获得超过203个赞
知道小有建树答主
回答量:308
采纳率:100%
帮助的人:129万
展开全部
linkedList 源码
public void add(int index, E element) {
addBefore(element, (index==size ? header : entry(index)));
}

entry(str)方法实现
private Entry<E> entry(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
Entry<E> e = header;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}
linkedList实现接口List List继承接口Collection
是有序集合,所有在add的时候它会判断当前的索引是否允许add当前插入的索引
当前你的最大索引为0 你插入2 if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);会抛出此异常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式