假设我有这样一个ArrayList:
ArrayList<Integer> list = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
添加操作后:
list.add(2);
list.add(3);
list.add(5);
list.add(7);
Run Code Online (Sandbox Code Playgroud)
number 2如果我这样做,我想删除
list.remove(2);
Run Code Online (Sandbox Code Playgroud)
然后number 5将被删除,我怎么能删除number 2?并且假设我不知道索引number 2.
Evg*_*eev 82
试试这个
list.removeAll(Arrays.asList(2));
Run Code Online (Sandbox Code Playgroud)
它将删除value = 2的所有元素
你也可以用它
list.remove(Integer.valueOf(2));
Run Code Online (Sandbox Code Playgroud)
但它只会删除2的第一次出现
list.remove(2)不起作用,因为它匹配List.remove(int i)删除具有指定索引的元素
Roh*_*ain 14
方法有两种版本remove():
ArrayList#remove(Object)需要Object删除,和ArrayList#remove(int)需要index删除.使用a ArrayList<Integer>,删除整数值2,将其作为索引,因为remove(int)它与此完全匹配.它不会框2来Integer,拓宽它.
解决方法是Integer明确获取对象,在这种情况下,扩展将优先于取消装箱:
list.remove(Integer.valueOf(2));
Run Code Online (Sandbox Code Playgroud)
代替:
list.remove(Integer.valueOf(2));
Run Code Online (Sandbox Code Playgroud)
你当然可以只使用:
list.remove((Integer) 2);
Run Code Online (Sandbox Code Playgroud)
这将转换为 Integer 对象而不是原始对象,然后转换remove()为 Object 而不是 Arraylist Index
我认为这是您想要的:带有get / remove方法的ArrayList <Integer>
list.remove(new Integer(2));
Run Code Online (Sandbox Code Playgroud)
小智 5
最简单的方法是:
list.remove((Integer)5);
Run Code Online (Sandbox Code Playgroud)
没有不必要的对象创建,只需将 Index 转换为 Integer。奖励:最简单的语法。