ArrayList <integer>,带有get / remove方法</integer>

时间:2013-02-27 16:26:09

标签: java android list arraylist integer

当我在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(Object object)

Java但它如何有所作为? 是否有方法指针? 是否有一种不那么模糊的方法来做到这一点?

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

PS:我应该说我最后使用了SparseIntArray,但我很好奇

4 个答案:

答案 0 :(得分:11)

对于州议员。 List#remove(index)返回从列表中删除的Object。 List#remove(Object)返回一个布尔值。

然而,在这种特殊情况下。你能做到的。

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

答案 1 :(得分:2)

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

顺便说一下,在这种情况下API如此暧昧的原因是,在制作API时,没有自动装箱,因此首先不可能编写含糊不清的代码。然而,改变方法以使其明确无误将是一个突破性的变化。因为大多数时候将Integer存储在arraylist中并不是一个好主意,所以他们决定让我们忍受这种轻微的烦恼。

答案 2 :(得分:2)

如果只是整数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);
    }

}

答案 3 :(得分:0)

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