[英]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.