gpt4 book ai didi

java - 从 ArrayList 中删除项目时出现意外行为

转载 作者:行者123 更新时间:2023-12-01 16:35:17 24 4
gpt4 key购买 nike

在我的 Android 应用程序 Java 代码中,我有一个自定义数据类型的 ArrayList。据我所知,当您执行 ArrayList.remove(location) 时,位于位置上方的所有项目都会下移一位。但是由于某种原因,当我从数组的末尾向后迭代以删除数组中的选定项目时,每次删除项目时,它下面的所有项目都会向上移动一个,而不是较高项目的正常行为向下移动一位。因此,当我删除数组中间的第一个项目时,0 处的项目将变为 1,并且 0 变为空。是否有什么特别的事情是我可以做的,或者是某种情况会导致这种情况发生?

<小时/>

我很抱歉不清楚我到底在做什么。我没有遍历 ArrayList。但我有另一个列表,其中包含我需要删除的原始列表中的所有项目。我对第二个列表执行 Collections.sort,并在第二个列表上从末尾到开始进行迭代,并且在每次迭代中,我执行 ArrayList.remove 第一个列表,其中包含从第二个列表读取的位置。因此,删除从最高位置到最低位置,我认为这可以防止每次删除时较低项目发生任何变化。但我看到发生的情况是低于已删除项目的项目全部向上移动以填补空白。为什么会发生这种情况?

最佳答案

如果您需要迭代列表,并随时从列表中删除项目,请尝试使用迭代器和 while 循环。 Iterator接口(interface)定义了一个 remove() 方法,该方法从正在迭代的 Collection 中删除使用 next() 检索到的最后一项。

List list = new ArrayList( );
Iterator iter = list.iterator( );

while ( iter.hasNext( ) )
{
Object item = iter.next( );

if ( shouldDelete( item ) )
{
iter.remove( );
}
}

关于java - 从 ArrayList 中删除项目时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833431/

24 4 0