Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList索引超出范围异常_Java_Arraylist_Replace_Indexoutofboundsexception - Fatal编程技术网

Java ArrayList索引超出范围异常

Java ArrayList索引超出范围异常,java,arraylist,replace,indexoutofboundsexception,Java,Arraylist,Replace,Indexoutofboundsexception,最近在使用arrayList时,我发现了一个奇怪的问题。我希望在arraylist中保留2个元素,并希望在元素0中保留object1,在元素1中保留object2 我在一个循环中决定这件事 当它碰巧将第一个元素添加到它的抛出indexOutofBounds时。根据Javadoc,索引大于它的大小 public static void main(String[] args) { ArrayList<String> list = new ArrayList<

最近在使用arrayList时,我发现了一个奇怪的问题。我希望在arraylist中保留2个元素,并希望在元素0中保留object1,在元素1中保留object2

我在一个循环中决定这件事

当它碰巧将第一个元素添加到它的抛出indexOutofBounds时。根据Javadoc,索引大于它的大小

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++;
        }
    }
publicstaticvoidmain(字符串[]args)
{
ArrayList=新建ArrayList();
list.add(1,“SECONDITEM”);//未设置由于大小而引发的抛出
列表。添加(0,“第一项”);
int-postn=0;
用于(字符串项:列表){
系统输出打印项次(“位置“+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
publicstaticvoidmain(字符串[]args)
{
ArrayList=新建ArrayList();
列表。添加(0,“x”);
列表。添加(1,“y”);
增加(1,“第二项”);
列表。添加(0,“第一项”);
int-postn=0;
用于(字符串项:列表){
系统输出打印项次(“位置“+postn+”:“+item”);
postn++;
}
}
输出:
位置0:FIRSTITEM
位置1:x
立场2:第二项
位置3:y
如何克服这个问题。我发现的一种方法是删除索引中的元素并添加元素。有更好的选择吗。
publicstaticvoidmain(字符串[]args)
{
ArrayList=新建ArrayList();
列表。添加(0,“x”);
列表。添加(1,“y”);
列表。删除(1);
增加(1,“第二项”);
列表。删除(0);
列表。添加(0,“第一项”);
int-postn=0;
用于(字符串项:列表){
系统输出打印项次(“位置“+postn+”:“+item”);
postn++;
}
}
位置0:FIRSTITEM
立场1:第二项
.add()方法在给定位置插入元素,并相应地移动另一个元素

要覆盖特定索引处的值,必须使用.set(位置、值)

试试set方法

    list.add(0,"x");
    list.add(1,"y");

    list.set(1,"SECONDITEM");

    list.set(0,"FIRSTITEM");
现在它将只返回两个值。


按此顺序呼叫时:

ArrayList<String> list = new ArrayList<String>();
list.add(1,"SECONDITEM"); // throwing  due to size is not set
ArrayList list=new ArrayList();
列表。添加(1,“第二项”);//未设置因大小而导致的投掷
您正试图添加到位置“1”,但列表中尚未添加任何内容。我相信这就是为什么你会犯错误。相反,您可能只想使用:

ArrayList<String> list = new ArrayList<String>();
list.add("FIRSTITEM");
ArrayList list=new ArrayList();
列表。添加(“第一项”);

因为这是一个空列表。您也可以使用索引,但每次都必须递增。有道理吗?

问题是。。。您试图以一种非预期的方式使用
列表。正如您所发现的,您不能设置或添加到当前大小范围之外的索引

如果您事先知道所需的大小,并且大小固定,那么使用
字符串[]
是更好的选择

如果您确实想要/需要一个允许随机访问集的动态结构,而不考虑当前大小,请在需要时编写自己的方法来填充列表:

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);
    }
 }
publicstaticvoidfillandset(int索引、T对象、列表)
{
如果(索引>(list.size()-1))
{
对于(int i=list.size();i
Erm,不要使用
ArrayList
?创建自己的LinkdList类来处理这种情况。或者在做任何索引特定的添加之前,在ArrayList中添加尽可能多的默认值。我有相同的问题,为什么?非常肯定OP知道这一点,因为他们在Q中说。我从一开始就知道大小,但我想从1开始初始化它(因此发生的事情很明显-这是测试中的数据集)。你对这种情况有什么想法吗?地图?:/并不是所有的元素都被设置了,其中一部分是空的。
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);
    }
 }