
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);
}
}
} 展开
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);
}
}
} 展开
4个回答
展开全部
add方法属于追加方法,就是向数组的尾部增加数据,但是用的是LinkList是可以头部增加数据的,使用方法addFirst(E element)就可以了。根据你的代码错误应该是这样的,一开始集合是长度是0,代表没有元素存在,那么这个下标为2的位置不存在,但是你却要这个位置后面增加数据,这样就错了,因为集合在这个时候还没有得到系统为下标为2的位置分配内存空间,程序执行的时候找不到这个为下标为2的位置,就是你增加的数据找不到地方摆,这样就错了。一般情况下就是使用add(E element)方法就可以了,这样add(int index, E element)方法的适合于在指定在某条数据后面追加数据(一般这条数据应该不是最后一条),就是说在这个集合里面我的数据已经填充好了,这个时候我要在其中的一条数据后面追加一条数据,那么我就用add(int index, E element)方法去追加数据,后面所存在数据就会被往后挤一个位置。以上就是我使用的心得,有不同观点可以追问,欢迎与我交流。
展开全部
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++;
}
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++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
嗯,是这样的,我简单写了个代码重现了。ArrayList是数组List,它是逐次增加大小的,就是要从小到大添加元素,它维护元素的顺序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);会抛出此异常。
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);会抛出此异常。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询