为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2022-01-20 19:15:51
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);}}}
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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

查看完整回答
反对 回复 2022-01-23
?
Cats萌萌

TA贡献1805条经验 获得超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++;
}



查看完整回答
反对 回复 2022-01-23
?
Helenr

TA贡献1780条经验 获得超3个赞

嗯,是这样的,我简单写了个代码重现了。ArrayList是数组List,它是逐次增加大小的,就是要从小到大添加元素,它维护元素的顺序。

查看完整回答
反对 回复 2022-01-23
  • 3 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信