面试的时候遇到这样一个问题
List<String> list = new ArrayList<String> ();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六也");
list.add("赵六也");
list.add("删除测试");
删除其中长度为3的元素,乍一看就是很简单的foreach,然后遍历每个元素,删除长度等于3的就好,其实里面埋了地雷,因为在通过集合的索引去拿的时候会,当删掉第一个"赵六也",index往下加1,直接会走到”删除测试”哪里,然后再按照index==6去取元素会直接数组越界,所以正确的写法有三种,
第一种:通过foreach循环去遍历
for (Iterator<String> it=list.iterator(); it.hasNext(); ) {
if(it.next().length()==3){
it.remove();
}
}
第二种:通过for循环去遍历
for(int i=0;i<list.size();i++){
if(list.get(i).length()==3){
list.remove(i--);
}
}
第三种:while循环去删除
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
if(str.length()==3){
iterator.remove();
}
}
浙公网安备 33010602011771号