【问题标题】:java arraylist indexOutOfBonds Exception reasonjava arraylist indexOutOfBonds 异常原因
【发布时间】:2015-11-12 08:47:56
【问题描述】:

我正在尝试在数组列表的不同位置添加各种项目。 我需要使用arraylist,因为要读取的元素数量不清楚。

当我添加元素时,我遇到了 indexoutofbonds 异常。 我知道如果索引大于 size() 我可能会遇到异常。 但是因为我认为当我尝试添加比数组列表大小更多的元素时大小会增加,为什么我会遇到异常? array 和 arraylist 之间的区别在于 arraylist 是动态的并且可以处理大小问题?我错了吗?

一个例子如下。我正在使用数组列表的数组列表。

arr.add(e1,new ArrayList<Integer>());

在这种情况下,e1 可能是 1,0,10001,4,540,100000

arraylist 不应该处理这个问题吗?

我的意思是 我不想在下面使用那种方法。我需要元素之间的空格,以便在程序读取数据时其他元素可以适应它们的位置。我不希望它们被移动,因为为上述代码指定的 add 方法正在获取位置和元素。我不想将该项目添加到下一个可用位置。

arr.add(new ArrayList<Integer>());

任何帮助都会很有用。或者你可以让我在 Java 中使用另一种数据结构来解决我的问题。

【问题讨论】:

  • 完整代码在哪里?什么是堆栈跟踪?

标签: java arraylist


【解决方案1】:

如果您指定要插入的索引,它将为您动态处理。但是如果你想在特定位置插入,你必须确定:

index >= 0 && index < size()

documentation

在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。

..

投掷

IndexOutOfBoundsException - 如果索引超出范围 (index size())

【讨论】:

    【解决方案2】:

    根据document

    public void add(int index, E元素)

    抛出: IndexOutOfBoundsException - 如果索引超出范围 (index size())

    您必须确保索引没有超出范围。

    换句话说,如果你指定&gt; size() 的索引,ArrayList 不知道如何操作size() 和索引之间的元素。它应该构造这些元素并为您添加它们,也许是默认构造函数?我认为这应该是你的责任。如:

    if (e1 > arr.size()) {
        arr.addAll(Collections.nCopies(e1 - arr.size(), Integer.valueOf(0)));
    }
    arr.add(e1, new ArrayList<Integer>());
    

    【讨论】:

      【解决方案3】:

      好的,我想通了。 ArrayList 总是变化的。您不能在元素之间留下空格。这就是我想要的。

      迟到总比没有好;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-14
        相关资源
        最近更新 更多