A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

正着遍历list,边遍历边删除,会漏删元素。使用增强for循环会报错,使用普通for循环,list.size()是变的,会角标溢出。求解决

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

4 个回复

倒序浏览
        @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()会变小所以删不全

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
用迭代器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.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
正着遍历,有条件的删除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);
                }
        }

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
水蓝 发表于 2014-3-18 16:39
用迭代器iterator,示例代码:

这种循环中,进行添加、删除动作。最容易想到的就是迭代器了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马