Java ArrayList删除元素时失败

来源:互联网 发布:gta5ol小萝莉捏脸数据 编辑:程序博客网 时间:2024/04/28 11:48

今天想要通过遍历ArrayList,删除指定值的元素的时候遇到了个问题。

示例如下:

package cn.sehzh;import java.util.ArrayList;import java.util.List;class Main{public static void main(String[] args) {List<String> list;list = new ArrayList<String>();list.add("asd");list.add("asd");list.add("qwe");System.out.println("before delete......");for (String string : list) {System.out.println(string);}for (int i = 0; i < list.size(); i++) {if("asd".equals(list.get(i))){list.remove(i);}}System.out.println("after delete......");for (String string : list) {System.out.println(string);}}}
想要的效果为:

before delete......
asd
asd
qwe
after delete......
qwe

实际结果为:

before delete......
asd
asd
qwe
after delete......
asd
qwe

原因:在遇到匹配的元素后,list.remove(i),list的size就会减1,这样就会跳过下一个元素。

解决办法:倒序遍历

package cn.sehzh;import java.util.ArrayList;import java.util.List;class Main {public static void main(String[] args) {List<String> list;list = new ArrayList<String>();list.add("asd");list.add("asd");list.add("qwe");System.out.println("before delete......");for (String string : list) {System.out.println(string);}for (int i = list.size() - 1; i >= 0; i--) {if ("asd".equals(list.get(i))) {list.remove(i);}}System.out.println("after delete......");for (String string : list) {System.out.println(string);}}}
输出结果:

before delete......
asd
asd
qwe
after delete......
qwe


0 0
原创粉丝点击