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> 与 get/remove 方法