【发布时间】:2020-05-18 15:06:29
【问题描述】:
我有一个ArrayList 的对象,有时我打电话给remove() 删除其中的一些。
我在 Google Android Developer Console 中注意到了一些关于 NullPointerException 的报告,最后我发现在某些情况下,我正在迭代该数组以访问对象,并且由于某种原因,在删除了一些对象之后,数组的大小仍然相同,例如,如果数组有 11 个元素并且我删除了最后一个元素,它仍然有 11 个元素,但最后一个元素包含 null,所以,.size() 返回 11,它给出了@ 987654326@ 尝试访问包含在最后一个位置的空对象后。
为什么会这样?如何避免这种情况?
编辑:在迭代之前和删除之后,我将三个带有“addAll()”的数组合并为一个混合数组,也许 addAll 正在复制错误删除的空引用?
【问题讨论】:
-
您是否尝试在多个线程中执行此操作?
ArrayList不是线程安全的。从根本上说,我怀疑您误诊了问题,但如果没有看到重现,很难判断。 -
@JonSkeet 在迭代之前和删除之后,我将三个带有“addAll()”的数组合并为一个混合数组,也许 addAll 正在复制错误删除的空引用?
-
@JonSkeet btw 我没有使用线程,并且在迭代它们之前很久就删除了这些项目,所以我认为这不是并发问题
-
与其描述你的代码,你应该向我们展示你的代码——最好是minimal reproducible example的形式。
标签: java android arraylist nullpointerexception