ArrayList <Integer> 与 get/remove 方法

Posted

技术标签:

【中文标题】ArrayList <Integer> 与 get/remove 方法【英文标题】:ArrayList <Integer> with the get/remove method 【发布时间】: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 但我很好奇

【问题讨论】:

【参考方案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)) 确定删除对象

【讨论】:

以上是关于ArrayList <Integer> 与 get/remove 方法的主要内容,如果未能解决你的问题,请参考以下文章

ArrayList<Integer> 接受字符串

ArrayList <Integer> 与 get/remove 方法

将整数添加到 ArrayList<Integer>

Arraylist到数组复制Java

将 ArrayList<Integer> 转换为 int[] 的最快方法 [重复]

保存并获取 ArrayList<Integer> Android