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);
  • 相关阅读:
    网上搜索整理的前端开发工程师面试题附答案
    Python-RabbitMQ-topic(细致消息过滤的广播模式)
    Python-RabbitMQ-direct(广播模式)
    Python-RabbitMQ-fanout(广播模式)
    rabbitmq中关于exchange模式type报错
    Python-RabbitMQ(持久化)
    Python-RabbitMQ(简单发送模型)
    python-gevent模块实现socket大并发
    python-gevent模块(自动切换io的协程)
    python-greenlet模块(协程)
  • 原文地址:https://www.cnblogs.com/lltse/p/2670633.html
Copyright © 2011-2022 走看看