面试的时候遇到这样一个问题

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();
  }
}

 

posted on 2017-09-25 12:42  风吹屁屁凉_andy  阅读(167)  评论(0)    收藏  举报