//删除集合中的偶数数据
List arr = new ArrayList();
for(int i = 0; i < 20; i++){
arr.add(i);
}
for(int i = 0; i <arr.size() ; i++){
if(arr.get(i)%2==0){
arr.remove(i);
}
}
for(int i = 0; i < arr.size(); i++){
System.out.print(arr.get(i)+" ");
}
以上的代码是否有问题?是不是出了越界的异常?应该改成这样么?
List arr = new ArrayList();
for(int i = 0; i < 20; i++){
arr.add(i);
}
for(int i = 0; i <arr.size() ; i++){
if(arr.get(i)%2==0){
arr.remove(i);
i--; //加上这一句是否就没问题了?
}
}
for(int i = 0; i < arr.size(); i++){
System.out.print(arr.get(i)+" ");
}
@Test
public void deleteEven() {
List<Integer> arr = new ArrayList<Integer>();
System.out.println("删除前数组:");
for (int i = 0; i < 20; i++) {
arr.add(i);
System.out.print(i + ",");
}
System.out.println();
for (int i = 0; i < arr.size(); i++) {
if (arr.get(i) % 2 == 0) {
arr.remove(i);
}
}
System.out.println("删除后数组:");
for (int i = 0; i < arr.size(); i++) {
System.out.print(arr.get(i) + ",");
}
}
删除前数组:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
删除后数组:
1,3,5,7,9,11,13,15,17,19,
删除,不要重头往后遍历,要从后往前遍历
尽量不要在List遍历的同时操作List元素,因为list.size()在变化,推荐使用迭代器操作数据
list下标问题,remove后下标会后移 如果不减1的话 会下标越界。 可以看看list的基础知识