• 对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);
  • 相关阅读:
    android ART hook
    Bind Enum to ListControl
    注意WPF中绑定使用的是引用类型
    Android开发第2篇
    Android开发第1篇
    Extension method for type
    DB2实用命令记录
    TDD三大定律
    【InstallShield】 为什么卸载后有的文件没有删掉
    GAC write failed when upgrade with InstallShield
  • 原文地址:https://www.cnblogs.com/lltse/p/2670633.html
Copyright © 2020-2023  润新知