首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用普通的for循环从ArrayList中删除某些对象吗?

我可以使用普通的for循环从ArrayList中删除某些对象吗?
EN

Stack Overflow用户
提问于 2016-11-30 00:49:20
回答 1查看 169关注 0票数 0

假设我们有一个猫的ArrayList。

这是我们的猫:

代码语言:javascript
复制
public class Cat{
   String color;
   int age;
   public Cat(String color, int age){
       this.color = color;
       this.age = age;
   }
 }

我们有一只猫,每只猫都有一种颜色。在代码中的其他地方,我们有以下内容:

代码语言:javascript
复制
 ArrayList<Cat>cats = new ArrayList<Cat>();
 cats.add(new Cat("white",5);
 cats.add(new Cat("black",6);
 cats.add(new Cat("orange",10);
 cats.add(new Cat("gray",3);
 System.out.println(cats.size()); prints out 4

现在是猫,ArrayList有4只猫在里面。如果我想移除所有5岁以上的猫,难道我不应该这样做吗?

代码语言:javascript
复制
for(int index = 0; index<cats.size(); index++){
    if(cats.get(index).age > 5){
        cats.remove(index);
    }
}

现在运行之后,我打印出猫的大小ArrayList和它说3,即使它应该删除3猫,留下一个。

,所以,这不应该起作用吗?我不明白为什么不会。还有什么其他方法可以从列表/数组中删除具有特定值的对象呢?

EN

回答 1

Stack Overflow用户

发布于 2016-11-30 00:56:18

您的示例的问题是,您正在从cat数组中删除一个项,但没有考虑到新的大小。正在发生的事情是:

  • I= 0。猫是白色的,年龄是5岁,所以没什么可做的。
  • I= 1。Cat为“黑色”,年龄为6岁。删除项在索引1(现在大小为3,索引1为“橙色”)。
  • 猫是灰色的,年龄是3岁,所以没什么可做的。
  • I= 3,它是而不是小于猫的大小(即3),所以不要再次进入for循环

如果确定要使用for循环,最简单的解决方案是每次删除元素时将索引减少一个,如下所示:

代码语言:javascript
复制
for(int index = 0; index<cats.size(); index++){
   if(cats.get(index).age > 5){
       cats.remove(index);
       index = index - 1; // Accounting for index of elements ahead changing by one
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40878430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档