java - IndexOutOfBoundsException 即使元素存在于数组列表中

标签 java arraylist linked-list

我在 ArrayList 中有 10001 个元素,当我尝试将它们一一删除时,我在中途(即在 5000 个元素之后)收到 IndexOutOfBoundsException 异常。实在不知道为什么。

  public static void main(String[] args) {
    List<Integer> numberArrayList = new ArrayList<>();
    List<Integer> numberLinkedList = new LinkedList<>();

    long start, end;

    start = System.currentTimeMillis();
    for (int i = 0; i < 10_001; i++) {
      numberArrayList.add(i);
    }
    end = System.currentTimeMillis();

    System.out.println("Time taken to insert 10_001 elements in ArrayList: " + (end - start));

    start = System.currentTimeMillis();
    for (int i = 0; i < 10_001; i++) {
      numberLinkedList.add(i);
    }
    end = System.currentTimeMillis();

    System.out.println("Time taken to insert 10_001 elements in LinkedList: " + (end - start));

    /* **************************************************************/
    start = System.currentTimeMillis();
    for (int i = 0; i < 10_001; i++) {
      numberArrayList.remove(i);
    }
    end = System.currentTimeMillis();

    System.out.println("Time taken to remove 10_001 elements from the front in ArrayList: " + (end - start));

    start = System.currentTimeMillis();
    for (int i = 0; i < 10_001; i++) {
      numberLinkedList.remove(i);
    }
    end = System.currentTimeMillis();

    System.out.println("Time taken to remove 10_001 elements from the front in LinkedList: " + (end - start));


  }

上面的程序结果

Time taken to insert 100_001 elements in ArrayList: 2
Time taken to insert 100_001 elements in LinkedList: 1
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5001, Size: 5000
    at java.util.ArrayList.rangeCheck(ArrayList.java:657)
    at java.util.ArrayList.remove(ArrayList.java:496)
    at collections_jnit.list.ArrayList_vs_LinkedList.main(ArrayList_vs_LinkedList.java:34)

最佳答案

一旦删除 5000 个元素,则意味着 10001-5000 = 5001,因此考虑从 0 开始索引,所以现在索引范围为 05000因此 5001 是异常(exception)。

解决方案:如果您想在遍历时从列表中删除项目,那么我建议使用迭代器

Iterator<Integer> itr = numberArrayList.iterator();
while (itr.hasNext()) {
    itr.remove();
}

关于java - IndexOutOfBoundsException 即使元素存在于数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541358/

相关文章:

可以修改结构吗?

java - 有没有办法将 String 对象分配为自定义类实例?

java - 从构造函数调用函数

java - 如何在指向 ArrayList 中的对象的 "else if"中使用 boolean 值

java - 给一个arraylist另一个arraylist JAVA的值

c - 在 C 中反转列表后打印单链表的问题

C编程,动态分配+链表

java - 更新到 7.7.0 后,Vaadin widgetset 路径发生了变化

java - 如果在 Java 中使用长数据类型,则访问数组元素

Android创建静态ArrayList