[英]ArrayList index out of bounds exception
最近在使用arrayList时,我发现了一个奇怪的问题。 我想将2个元素保留在arraylist中,并希望将object1保留在element 0中,将object2保留在element1中。
我正在循环决定这一点。
当碰巧添加第一个元素时,将其抛出indexOutofBounds。 根据java doc,索引大于其大小。
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add(1,"SECONDITEM"); // throwing due to size is not set
list.add(0,"FIRSTITEM");
int postn=0;
for(String item:list){
System.out.println("Position "+postn+" :"+item);
postn++;
}
}
然后我尝试将其他项目设置为0,1元素中的占位符,并尝试执行相同的操作
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add(0,"x");
list.add(1,"y");
list.add(1,"SECONDITEM");
list.add(0,"FIRSTITEM");
int postn=0;
for(String item:list){
System.out.println("Position "+postn+" :"+item);
postn++;
}
}
Output:
Position 0 :FIRSTITEM
Position 1 :x
Position 2 :SECONDITEM
Position 3 :y
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add(0,"x");
list.add(1,"y");
list.remove(1);
list.add(1,"SECONDITEM");
list.remove(0);
list.add(0,"FIRSTITEM");
int postn=0;
for(String item:list){
System.out.println("Position "+postn+" :"+item);
postn++;
}
}
Position 0 :FIRSTITEM
Position 1 :SECONDITEM
.add()方法将元素插入到给定位置,并相应地移动另一个元素
要覆盖特定索引的值,您必须使用.set(position,value)
尝试设置方法..
list.add(0,"x");
list.add(1,"y");
list.set(1,"SECONDITEM");
list.set(0,"FIRSTITEM");
现在它将仅返回两个值。
问题是...您正试图以一种不希望使用的方式来使用List
。 如您所知,您无法设置或添加超出当前大小范围的索引。
如果您事先知道所需的大小,并且它是固定大小,则使用String[]
是更好的选择。
如果您确实希望/需要一种动态结构,无论当前大小如何,都允许随机访问集,请在需要时编写自己的方法来填充列表:
public static <T> void fillAndSet(int index, T object, List<T> list)
{
if (index > (list.size() - 1))
{
for (int i = list.size(); i < index; i++)
{
list.add(null);
}
list.add(object);
}
else
{
list.set(index, object);
}
}
当您按此顺序致电时:
ArrayList<String> list = new ArrayList<String>();
list.add(1,"SECONDITEM"); // throwing due to size is not set
您正在尝试添加到位置“ 1”,但尚未将任何内容添加到列表中。 我相信这就是您得到错误的原因。 相反,您可能只想使用:
ArrayList<String> list = new ArrayList<String>();
list.add("FIRSTITEM");
由于它是一个空列表。 您也可以使用索引,但是每次都必须增加。 说得通?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.