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&lt;Integer&gt; remover = new ArrayList&lt;Integer&gt;();存储索引?我必须找到另一种方法来存储索引?有没有人对我有建议,因为数字/索引的数量必须灵活。 “DUP”源于他无意中使用了错误删除方法。这就是为什么我在那里发表额外评论的原因。 【参考方案1】:

当你有一个List&lt;Integer&gt;,如果你想调用remove(int index),你需要传入一个int。如果你想打电话给remove(Object o),你需要传入一个IntegerInteger 继承自 Objectint 没有。

如果您发现自己打错了电话,请将您的 int 转换为 Integer,反之亦然,使用 numbers.remove((int) ...)numbers.remove((Integer) ...)

【讨论】:

澄清一下,整数与整数不同。 Integer 是一个对象。 @kwantuM 整数与int 不同。 所以基本上我不能使用ArrayList&lt;Integer&gt; remover = new ArrayList&lt;Integer&gt;();存储索引?我必须找到另一种方法来存储索引?有没有人对我有建议,因为数字/索引的数量必须灵活。 @MarkoTopolnik 这正是我所说的。 您可以将这一行:numbers.remove(remover.get(i)); 更改为 numbers.remove((int) remover.get(i));。这将使它工作。

以上是关于Java Arraylist.remove 删除第一次出现而不是索引,即使我输入了一个 int? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java ArrayList.remove() 不起作用? [复制]

Java中ArrayList remove()的不良行为[重复]

ArrayList remove注意事项

HashMap要点总结

类集框架解析

在recyclerview中删除和刷新