【问题标题】:ArrayList <Integer> with the get/remove methodArrayList <Integer> 与 get/remove 方法
【发布时间】:2013-02-13 13:23:01
【问题描述】:

当我在 Java 中使用 ArrayList 时,有些东西我不明白。这是我的初始化代码:

 ArrayList<Integer> list = new ArrayList <Integer> ();
list.add (0);
list.add (1);

有时我需要通过索引删除一个对象:

list.remove (0) // delete the object in the first box

但有时我想通过它的内容删除一个对象:

list.remove (0) // delete the object HAS Which value of 0

这段代码很模糊。为了阐明我想在代码中执行的操作,我指定了这样的类型:

list.remove ((Object) 0) // delete the object which has a value of 0

如果我不AC,唯一知道调用了哪些方法的方法是将鼠标指针放在方法上查看: java.util.ArrayList.remove boolean(对象对象)

Java 但是它有什么不同呢? 有方法指针吗? 有没有更明确的方法来做到这一点?

非常感谢,对不起我的英语。

PS:我应该说我终于使用了 SparseIntArray 但我很好奇

【问题讨论】:

    标签: java android list arraylist integer


    【解决方案1】:

    对于陈述者。 List#remove(index) 返回从列表中删除的对象。 List#remove(Object) 返回一个布尔值。

    然而,在这种特殊情况下。你可以做。

     ArrayList<Integer> list = new ArrayList <Integer> ();
            list.add (0);
            list.add (1);
            System.out.println(list.remove(new Integer(0)));
    

    【讨论】:

    • 是的,我注意到了这一点。但如果我不使用返回值,我想知道 Java 是如何发挥作用的,自动装箱是如何工作的。
    • @juliendumortier 这只是在这种特殊情况下有点令人困惑。但是,如果您在对象的情况下总体上考虑它,那就是这样。 list.remove(animal)list.remove(watever).
    • 好的,谢谢!最后一个问题。 System.out.println (list.remove ((Integer) 0); 这是一个好/坏的做法?(这样可以避免创建一个新实例)。
    • 未来读者:Integer 构造函数在较新的 Java 版本中被标记为已弃用
    【解决方案2】:

    当 Java 中存在歧义时(当多个方法签名可以在编译时匹配参数的类型时),使用强制类型转换来选择正确的方法是您唯一的选择。当然,您可以在实际调用之前将参数转换并存储到正确类型的局部变量中,但这并不能让读者更清楚 - 在我看来,将参数直接转换到使用它的位置是最好的选择,以明确调用哪个方法。

    顺便说一下,在这种情况下,API 如此模棱两可的原因是,在创建 API 时,没有自动装箱,所以一开始就不可能编写这样模棱两可的代码。然而,改变方法以使其明确化将是一个突破性的改变。由于在大多数情况下将 Integer 存储在 ArrayList 中并不是一个好主意,因此他们决定让我们忍受这种轻微的烦恼。

    【讨论】:

    • “因为在大多数情况下将整数存储在数组列表中并不是一个好主意”为什么不呢?想要对整数执行列表操作似乎很正常
    • @KartikChugh 为什么不呢?表现!如果你在做数据科学,那么你使用了错误的工具和实现。为什么还要存储可变数量的普通 Integer 对象?
    【解决方案3】:

    如果只是 Integer ArrayList 中 remove() 方法的歧义困扰您,您可以扩展 ArrayList 以实现自己的:

    public class MyIntArrayList extends ArrayList<Integer> {
    
        boolean removeByObject(Integer intObj) {
            return super.remove(intObj);
        }
    
        Integer removeByIndex(int index) {
            return super.remove(index);
        }
    
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用list.remove(new Integer(0)) 确定删除对象

      【讨论】:

        猜你喜欢
        • 2013-04-21
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多