简体   繁体   English

Java ArrayList中Remove方法的歧义

[英]Ambiguity of Remove Method in Java ArrayList

Generally, the usage of remove method for ArrayList in Java is shown as below: 通常,Java中ArrayList的remove方法的用法如下所示:

ArrayList<String> list = new ArrayList<String>();
list.add("abc");
list.add("efg");

list.remove(1);   //Removing the second element in ArrayList.
list.remove("abc");  //Removing the element with the value "abc" in ArrayList. 

However, there is situation where overloading doesn't work. 但是,在某些情况下,重载不起作用。

ArrayList<Integer> numbers = new ArrayList<Integer>();

numbers.add(1); numbers.add(1); numbers.add(2); numbers.add(2); when I tried to remove the element with value 2. It gives me error: 当我尝试删除值为2的元素时,出现错误:

java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.remove(ArrayList.java:387)

So it looks like when it comes to remove number, I can't remove element with specific value. 因此,当要删除数字时,我无法删除具有特定值的元素。 Because the computer would assume all the integer value as index, not the value of element. 因为计算机会将所有整数值作为索引,而不是element的值。

It is a subtle error. 这是一个微妙的错误。 Is there any other simple way to delete the element with specific integer value? 还有其他简单的方法可以删除具有特定整数值的元素吗?

You need to use an Integer object. 您需要使用一个Integer对象。

    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(10);
    numbers.remove(new Integer(5));
    System.err.println(numbers);
    //Prints [10]

尝试remove(new Integer(1) 。这将起作用,因为它将与remove(Object o)完全匹配

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM