我有一些代码。
@Override
public void handle(ActionEvent event) {
System.out.println(counter.get(0));
fileHolder.remove(counter.get(0));
try {
FileWriter writer = new FileWriter("videoGameDatabase.txt");
for (int i=0;i<fileHolder.size();i++) {
writer.write(fileHolder.get(i));
if(i < fileHolder.size()-1) writer.write("\r\n");
}
writer.close();
} catch (IOException ex) {
Logger.getLogger(FinalProject.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
在这里,我试图删除数组列表中的一个元素。当我尝试使用此按钮删除条目时,它不起作用。计数器的第一个元素的值为 1。
但是,当我这样做时:
fileHolder.remove(1);
它工作得很好,但两个值都是 1。
为什么第一个不起作用但第二个却起作用?
最佳答案
一个字:Autoboxing 。 Java 集合框架自动将原始值与其相应的对象装箱,例如int
自动装箱为 Integer
在将其存储在Collection
之前例如 ArrayList
。当使用 List<Integer>
时,这会导致歧义。因为有两个remove方法,分别是remove(int)
和remove(Object)
。
解决方案:您应该使用显式强制转换来调用正确的 remove
使用 ArrayList<Integer>
时的方法。
- 使用
list.remove((Integer)x)
按值删除时 - 使用
list.remove((int)x)
通过索引删除时
注意:请勿使用 list.remove(new Integer(x))
。这不必要地创建了一个新的 Integer
每次调用时都会实例化。相反,请使用显式强制转换(如上所示)或 Integer.valueOf
方法;这些都利用了自动装箱缓存。
关于java - Arraylist 没有正确删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36670008/