zoukankan      html  css  js  c++  java
  • 对list做循环时,循环代码中不能修改list的结构

    分析

      在 jdk1.5 版以上的foreach 循环写法中,不能在循环代码中对正在循环的 list 的结构进行修改,即对list做add、remove等操作,如果做了这些操作,必须立即退出循环,否则会抛出异常。

     示例

     

      代码示例待补全。

     

    class Book {
        private String name;
        private float price;
    
        public Book(String name, float price) {
            this.name = name;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public float getPrice() {
            return price;
        }
    
        public void setPrice(float price) {
            this.price = price;
        }
    
    }
    List<Book> list = new ArrayList<Book>();
            Book book1 = new Book("java编程基础", 23);
            Book book2 = new Book("c++编程基础", 26);
            Book book3 = new Book("c编程基础", 34);
            Book book4 = new Book("sql编程基础", 15);
            Book book5 = new Book("oracle编程基础", 40);
    
            list.add(book1);
            list.add(book2);
            list.add(book3);
            list.add(book4);
            list.add(book5);
            
            for (Book book : list) {
                if ("java编程基础".equals(book.getName())) {
                    list.remove(book); // 不能在此时删除对象。
                } else if ("oracle编程基础".equals(book.getName())) {
                    list.remove(book); // 不能在此时删除对象。
                }
            }

      解决上面代码的问题,可以通过循环取出对象,然后再循环结束后再进行删除。

     

    Book book_sql = null;
            Book book_oracle = null;
            
            for(Book book : list)
            {
                if("sql编程基础".equals(book.getName()))
                {
                    book_sql = book;
                }
                else if("oracle编程基础".equals(book.getName()))
                {
                    book_oracle = book;
                }
            }
            
            list.remove(book_sql);
            list.remove(book_oracle);
  • 相关阅读:
    [BZOJ4480] JSOI2013 快乐的jyy
    [BZOJ4755] JSOI2016 扭动的回文串
    [BZOJ4754] JSOI2016 独特的树叶
    [BZOJ5179] JSOI2011 任务调度
    [BZOJ4320] SHOI2006 Homework
    [AT2300] Snuke Line
    [洛谷P3974] TJOI2015 组合数学
    [CF331E] Biologist
    [洛谷P4249] WC2007 剪刀石头布
    【BZOJ4548】小奇的糖果
  • 原文地址:https://www.cnblogs.com/lltse/p/2670633.html
Copyright © 2011-2022 走看看