即使我在.remove(int i)
中输入了一个int,Arraylist.remove也会删除第一个匹配而不是索引?
让我有一个随机数字的arraylist“数字”,这个例子让我们说{1,3,5,2,4,6}
ArrayList<Integer> numbers = new ArrayList<Integer>();
aList.add(1);
aList.add(3);
aList.add(5);
aList.add(2);
aList.add(4);
aList.add(6);
我想根据他们的索引删除所有奇数。我创建了另一个包含索引的Arraylist:
int origSize = numbers.size();
for (int i = 0; i < origSize; i++) {
if (numbers.get(i) % 2 != 0) {
numbers.add(numbers.get(i));
remover.add(i);
}
出于某种原因,当我使用.remove函数根据索引删除元素时,它会删除第一个匹配项。 我的语法是正确的,或者我正在做.remove(int i):
for (int i = (remover.size() - 1); i>=0; i--) {
numbers.remove(remover.get(i));
}
在我的示例中,5出现在索引2处。但是运行.remove(remover.get(i))
,应该是.remove(2)
删除第一次出现的2 ...
最终,我得到{3,5,4,6},因为它删除了2,1和0而不是那些索引。为什么会这样?
非常感谢你的帮助。
答案 0 :(得分:5)
如果您有List<Integer>
,如果要拨打remove(int index)
,则需要传递int
。如果您想致电remove(Object o)
,则需要传递Integer
。 Integer
继承自Object
。 int
没有。
如果您发现自己拨错了,请使用int
或Integer
将numbers.remove((int) ...)
投放到numbers.remove((Integer) ...)
,反之亦然。