java - Arraylist 没有正确删除对象?

标签 java

我有一些代码。

     @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/

相关文章:

java - JPA "The attribute matching the ID class attribute xxxxxxx does not have the correct type int"

java - 在具有泛型参数的泛型方法中使用 Spring RestTemplate

java - 如何防止不可变对象(immutable对象)中的可变对象发生更改

java - 如何使 Java 通用方法静态?

java - Querydsl 忽略 JPA 实体的公用表表达式别名

java - 当Java中的谐波级数达到指定目标时,如何停止对其求和?

java - 在没有 Internet 连接时加载本地 JsonData

Java + Postgresql : How to store Parent and List of all children in a HashMap<String, ArrayList <字符串>>

java - 方法不能应用于给定类型。希望得到帮助

java - JAVA 中字符串转公钥