Java Arraylist.remove 删除第一次出现而不是索引,即使我输入了一个 int? [复制]
Posted
技术标签:
【中文标题】Java Arraylist.remove 删除第一次出现而不是索引,即使我输入了一个 int? [复制]【英文标题】:Java Arraylist.remove removes first occurrence instead of index, even though I input an int in? [duplicate] 【发布时间】:2017-02-21 09:37:09 【问题描述】:Arraylist.remove 删除第一个匹配项而不是索引,即使我在 .remove(int i)
? 中输入了一个 int?
让我们有一个随机数量的数组列表“数字”,对于这个例子,假设我们有 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 而不是那些索引。为什么会这样?
非常感谢您的帮助。
【问题讨论】:
我想你想要 remove(int) 签名 @SergiiGetman 1. OP 不使用 for-each 循环。 2. 在每个循环中,有一个列表的添加和另一个列表的删除。 remover.get() 将返回一个整数,而不是一个整数。 所以基本上我不能使用ArrayList<Integer> remover = new ArrayList<Integer>()
;存储索引?我必须找到另一种方法来存储索引?有没有人对我有建议,因为数字/索引的数量必须灵活。
“DUP”源于他无意中使用了错误删除方法。这就是为什么我在那里发表额外评论的原因。
【参考方案1】:
当你有一个List<Integer>
,如果你想调用remove(int index)
,你需要传入一个int
。如果你想打电话给remove(Object o)
,你需要传入一个Integer
。 Integer
继承自 Object
。 int
没有。
如果您发现自己打错了电话,请将您的 int
转换为 Integer
,反之亦然,使用 numbers.remove((int) ...)
或 numbers.remove((Integer) ...)
。
【讨论】:
澄清一下,整数与整数不同。 Integer 是一个对象。 @kwantuM 整数与int
不同。
所以基本上我不能使用ArrayList<Integer> remover = new ArrayList<Integer>()
;存储索引?我必须找到另一种方法来存储索引?有没有人对我有建议,因为数字/索引的数量必须灵活。
@MarkoTopolnik 这正是我所说的。
您可以将这一行:numbers.remove(remover.get(i));
更改为 numbers.remove((int) remover.get(i));
。这将使它工作。以上是关于Java Arraylist.remove 删除第一次出现而不是索引,即使我输入了一个 int? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Java ArrayList.remove() 不起作用? [复制]