【发布时间】:2016-04-11 03:32:54
【问题描述】:
我正在尝试从 ArrayList 中删除一个对象,但我不断收到 IndexOutOfBounds 错误。现在有很多可用的信息,为什么在 迭代 ArrayList 同时删除 时会发生这种情况,但我没有这样做。 示例:
ArrayList<Character> a = new ArrayList<Character>();
a.add('A');
a.add('B');
a.add('C');
System.out.println(a);
a.remove('A');
System.out.println(a);
打印[A, B, C],然后失败:
java.lang.IndexOutOfBoundsException: Index: 65, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.remove(ArrayList.java:474)
at b.<init>(b.java:23)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at bluej.runtime.ExecServer$3.run(ExecServer.java:746)
为什么会这样?
编辑澄清这个问题不是this question的重复:
这里发生的具体问题与迭代时删除元素时的常见问题无关。而是ArrayListremove方法重载和java自动将char类型转换为int造成的。
其他问题的答案未涵盖此方面。
【问题讨论】:
-
你要使用
a.remove(0); -
试试:
a.remove((Character)'A') -
我特别想删除一个对象,而不是一个索引,如此处所述:docs.oracle.com/javase/7/docs/api/java/util/…
-
是的,但是
'A'是原始类型,因此使用remove(int index)代替remove(Object o)。 -
@Jarrod Roberson 您提到的问题 重复 在这里没有回答我的问题。我完全了解迭代和删除元素时可能发生的问题,但是我的问题的答案是 remove 方法被重载并且从 char 到 int 的类型提升导致它失败。