List在迭代过程中如何进行增删改查 ListIterator知识点

/**

*    案例: 有如下一个list集合,需求,遍历集合,当集合中等于"five"元素,那么就插入元素"four".

*

*    解决问题的过程中发现:

*  在迭代过程中,如果使用了集合的方法进行增删改查操作,那么迭代器会抛出 异常 ConcurrentModificationException.

原因是,迭代器不知道集合中的变化,容易发生调用的不确定性.

解决办法: 在迭代时,不要使用集合的方法进行操作元素.可以使用迭代器的子接口ListIterator<E>

里面有很多操作元素的方法.而且可以正向迭代,反向迭代.

*

*    记住****:该列表迭代器只有List接口有。

 *                而且这个迭代器可以完成在迭代过程中的增删改查动作。(原因:因为List集合有角标)

*     列表迭代器列表ListIterator的概述:

*    允许程序员按任一方向遍历List、迭代期间修改List,并获得迭代器在List中的当前位置。

*    ListIterator没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。

*    长度为 n 的列表的迭代器有 n+1 个可能的指针位置.

*

*    具体方法用法,查看API ,Iterator 的子接口ListIterator

*/

public class ListIteratorDemo {

    public static void main(String[] args) {
        List list = new ArrayList();

        list.add("one");
        list.add("two");
        list.add("three");
        list.add("five");

        /*for(Iterator it = list.iterator(); it.hasNext();){
            Object obj = it.next();
            if(obj.equals("five")){

                 在迭代过程中,如果使用了集合的方法进行增删改查操作,那么迭代器会抛出异常.
                 原因是,迭代器不知道集合中的变化,容易发生调用的不确定性.
                 解决办法: 在迭代时,不要使用集合的方法进行操作元素.
                          可以使用迭代器的子接口ListIterator<E>中的方法就可以.
                          里面有很多操作元素的方法.而且可以正向迭代,反向迭代.
                 *
                //list.add("four");
                // 异常 ConcurrentModificationException
            }
            System.out.println(obj);
        }*/

        //用ListIterator重新解决问题
        for(ListIterator it = list.listIterator(); it.hasNext();){
            Object obj = it.next();
            if("three".equals(obj)){
                it.add("four");    //[one, two, three, four, five]
//                it.set("3");    //[one, two, 3, five]
                //对比输出结果
            }
        }
        System.out.println(list);
    }
}
时间: 2024-11-05 06:54:32

List在迭代过程中如何进行增删改查 ListIterator知识点的相关文章

yii中数据的"增删改查"相关工作!(此文比较乱,需细看)

使用findByPk()根据数据表主键查询的是对象,不需要使用foreach()循环出来 但是使用findall()和find()查询的是对象类型的数组需要使用foreach()循环出来 ======================================= public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCommand($sql); $query = $r

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成

TP框架中 数据库的增删改查

框架会用到数据库的内容,这一篇就是关于数据库的增删改查. 数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作, 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写config.php文件 我这里是这样的文件路径 (2)打开这个config.php文件,然后找到父类配置文件convention.php文件,将关于"数据库"的部分复制粘贴到config.php配置文件中(父类的conv

数据库中简单的增删改查(CRUD)

一切都是基于数据,而对数据的管理都离不开数据库.最近学到数据库的简单操作,所以写下这篇文章,总结一下学习到的知识.浅陋之处,多多见谅. 补充一下:一直弄不清SQL Server,Mysql ,以及Oracle的关系.SQL Server是微软的,因为微软系统的市场占有额,所以这款软件在市场上也占用很大份额,而Mysql是一款开源免费的数据库,我们知道关系型数据库最开始是IBM的一个实验室提出的理论,但是当时并没有被IBM公司重视,被Oracle的创始人劳伦斯·埃里森重视,发展壮大起来.但是Ora

python中字典的增删改查及相关知识点

1 ''' 2 数据划分:可变数据类型,不可变数据类型 3 不可变数据类型:tuple,str,bool,int 可哈希 4 可变数据类型: list, dict, set 不可哈希 5 dict key:必须是不可变数据类型 可哈希 6 dict value: 任意数据类型 7 dict 优点:二分法去查找 8 存储大量关系型数据 9 特点: 无序的 10 ''' 11 12 #>>>增 13 14 #使用key增加,类似于list的索引改变值 15 #但是list中的索引必须在范围内

JavaScript中数组的增删改查

                                           数组的增加 ary.push()   向数组末尾添加元素,返回的是添加后新数组的长度,原有数组改变 ary.unshift()  向数组开头添加元素,返回的是添加后新数组的长度,原有数组改变 var ary=[1,2,3,4]; var res=ary.unshift(6); console.log(res); ---->5 返回的是新数组的长度 ary.splice(n,m,x)从索引n开始删除m个元素,把新

MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)

设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计模式,JSP,Servlet,POJO .数据库使用mysql .数据库连接池需要使用C3P0数据库连接池 .页面上的提示需要使用jQuery ----技术难点 .多个请求如何使用一个Servlet .如何模糊查询 .如何在创建和修改的情况下,验证用户信息是否已被使用,并给出提示 ---------

Angularjs中表格的增删改查

总体的效果图是: 图中的每个按钮都是可以实现其操作的. (1)首先是html页面的编写: <!doctype html> <html ng-app="myModule"> <head> <meta charset="utf-8"> <title>学生信息管理</title> //需要用到的一些库,要加载的 <script src="bower_components/angular

Android中SQLite的增删改查

首先我们创建一个数据库帮助类PersonSQLLiteOpenHelper,单词拼写有点小错误.. 让这个类继承SQLiteOpenHelper package com.example.android03db.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; i