我们假设我们有一个Cats的ArrayList。
这是我们的猫:
public class Cat{
String color;
int age;
public Cat(String color, int age){
this.color = color;
this.age = age;
}
}
我们有一只猫,每只猫都有颜色。在我们的代码中的其他地方,我们有以下内容:
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岁以上的猫,该怎么办?我不能做以下事情吗?
for(int index = 0; index<cats.size(); index++){
if(cats.get(index).age > 5){
cats.remove(index);
}
}
现在,在运行之后,我打印出了猫ArrayList的大小,并且它显示为3,即使它应该删除3只猫并留下一只。
所以,不应该这样做吗?我不明白为什么它不会。还有哪些方法可以从List / Array中删除具有特定值的对象?
答案 0 :(得分:0)
您的示例的问题是您从cats数组中删除了一个项目,但没有考虑新的大小。发生了什么:
如果您确定要使用for循环,最简单的解决方案是每次删除元素时将索引减1,如下所示:
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
}
}