即使元素存在于阵列列表中,indexoutofboundSexception即使



我在试图一个一个元素中有10001个元素在阵列列表中有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的例外。

解决方案:如果您想在遍历列表中删除项目,则建议我使用Iterators

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

您可以将其更改为a while循环:

while (numberLinkedList.size() > 0) {
    numberLinkedList.remove(0);
}

使用for循环,您正在删除i的对象,该对象正在增加每种迭代,因此您最终只会删除一半的项目。

正如已经回答的,为什么要获得IndexOutOfBoundException,所以我要添加,如何安全地删除所有元素。有两种方法:

  1. arraylist.clear((

  2. arraylist.removeall((

这两种方法均从List继承到ArrayList。1比2。

快。

列表不是数组。如果将元素添加到具有尺寸N的列表中,则列表大小将增加,这意味着您可以访问元素N + 1。如果删除任何元素,则无法访问元素N + 1,此元素将位于N

阵列具有固定位置和固定尺寸。

请查看文档:

  • 数组
  • 收藏
  • 列表
  • 设置

numberlinkedlist.clear((;

或如果要迭代,请使用Java 8 :(

numberLinkedlist.removeif(i-> true(;

相关内容

  • 没有找到相关文章

最新更新