gpt4 book ai didi

java - ArrayList 错误 : same size, 在删除()其中一些元素后包含 "null"个元素

转载 作者:行者123 更新时间:2023-12-01 18:36:31 26 4
gpt4 key购买 nike

我有一个 ArrayList 对象,有时我会调用 remove() 来删除其中一些对象。

我在 Google Android 开发者控制台中注意到了一些 NullPointerException 的报告,最后我发现在某些情况下,我正在迭代该数组来访问对象,并且出于某种原因,在删除一些对象之后的对象,数组的大小仍然相同,因此,例如,如果数组有 11 个元素,我删除最后一个元素,它仍然有 11 个元素,但最后一个元素包含 null,因此,如 . size() 返回 11,在尝试访问最后一个位置中包含的 null 对象后,它会给出 nullpointerexception

为什么会出现这种情况?如何避免这种情况?

编辑:在迭代之前和删除之后,我将三个数组与“addAll()”合并为一个混合数组,也许 addAll 正在复制错误删除的空引用?

最佳答案

你有错误,由于你正在迭代一个对象引用,当你删除一个对象时,引用等待实例是相同的。您可以使用 HashMap ,它允许同时迭代和删除对象

获取我所说的错误的示例

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.generic;

import java.util.ArrayList;
import java.util.Scanner;

/**
*
* @author wilso
*/
public class prueba {

public static void main(String[] args) {
try {
ArrayList<String> dta = new ArrayList<>();
dta.add("Prueba");
dta.add("Prueba 2");
dta.add("Prueba 3");
for (String tmp : dta) {
System.out.println(tmp);
System.out.println(tmp);
dta.remove(1);
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

它会产生下一个错误

cd C:\Users\wilso\OneDrive\Documents\NetBeansProjectsF\OverFlow; "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91" cmd /c "\"\"C:\Program Files\NetBeans 8.0.2\java\maven\bin\mvn.bat\" -Dexec.args=\"-classpath %classpath com.generic.prueba\" -Dexec.executable=\"C:\Program Files\Java\jdk1.8.0_91\bin\java.exe\" -Dexec.classpathScope=runtime -Dmaven.ext.class.path=\"C:\Program Files\NetBeans 8.0.2\java\maven-nblib\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec\"" Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts. Scanning for projects...

------------------------------------------------------------------------ Building OverFlow 1.0-SNAPSHOT

--- exec-maven-plugin:1.2.1:exec (default-cli) @ OverFlow --- Prueba Prueba java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at com.generic.prueba.main(prueba.java:23) ------------------------------------------------------------------------ BUILD SUCCESS ------------------------------------------------------------------------ Total time: 0.748s Finished at: Sun Feb 02 13:55:11 COT 2020 Final

Memory: 6M/245M

关于java - ArrayList 错误 : same size, 在删除()其中一些元素后包含 "null"个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com