黑马程序员技术交流社区

标题: 正着遍历list,边遍历边删除,会漏删元素问题 [打印本页]

作者: lu89418    时间: 2014-3-18 16:33
标题: 正着遍历list,边遍历边删除,会漏删元素问题
正着遍历list,边遍历边删除,会漏删元素。使用增强for循环会报错,使用普通for循环,list.size()是变的,会角标溢出。求解决
作者: lu89418    时间: 2014-3-18 16:36
        @Test
        public void listTest1(){
                List<String> list = new ArrayList<String>();
                list.add("1");
                list.add("2");
                list.add("3");
                list.add("4");
                list.add("5");
       
               
                for(String temp : list){
                        System.out.println(temp);
                }
                System.out.println("---------------------------------");
               
                int length = list.size();
                for(int i = 0 ;i<=length-1 ; i++){
                        list.remove(0);
                }
               
                for(String temp : list){
                        System.out.println(temp);
                }
        }
       
如果不使用变量记录list.size(),每次循环list.size()会变小所以删不全

作者: 水蓝    时间: 2014-3-18 16:39
用迭代器iterator,示例代码:
  1. List<String> list = new ArrayList<String>();
  2.                 list.add("1");
  3.                 list.add("2");
  4.                 Iterator<String> iterator = list.iterator();
  5.                 while(iterator.hasNext()) {
  6.                         /*这边加if判断条件*/
  7.                         iterator.remove();
  8.                 }
复制代码

作者: lu89418    时间: 2014-3-18 16:39
正着遍历,有条件的删除list中的元素
        @Test
        public void listTest1(){
                List<String> list = new ArrayList<String>();
                list.add("1");
                list.add("2");
                list.add("3");
                list.add("4");
                list.add("5");
       
               
                for(String temp : list){
                        System.out.println(temp);
                }
                System.out.println("---------------------------------");
               
                int length = list.size();
                int tem = 0;
                for(int i = 0 ;i<=length-1 ; i++){
                        if(!"3".equals(list.get(tem))){
                                list.remove(tem);
                        }else{
                                tem++;
                        }
                }
               
                for(String temp : list){
                        System.out.println(temp);
                }
        }

作者: 水蓝    时间: 2014-3-18 16:40
水蓝 发表于 2014-3-18 16:39
用迭代器iterator,示例代码:

这种循环中,进行添加、删除动作。最容易想到的就是迭代器了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2