列表迭代器:

  ListIterator listerator():List集合特有的迭代器

  该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法

特有功能:

  Object previous();获取上一个元素

  boolean hasPrevious():判断是否有元素

  注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用

 package com.wyh.Iterator;

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; /**
* @author WYH
* @version 2019年11月9日 下午7:31:41
*
* ListIterator : List集合特有的迭代器
*
*/
public class ListIteratorDemo1 {
public static void main(String[] args) {
//创建集合
List i = new ArrayList(); //创建字符串对象并将其添加到集合中
i.add("王友虎");
i.add("李宏灿");
i.add("赵以浩");
i.add("齐博源");
i.add("李先锋"); //ListIterator 继承了 Iterator,所以可以用它的实现
Iterator it = i.iterator();
while(it.hasNext()) {
String s = (String)it.next();
System.out.println(s);
}
System.out.println("----------------------"); // previous()逆向打印
ListIterator list = i.listIterator();
/*//如果逆向打印处于第一个位置,输出为空
* System.out.println("------------逆向打印------------------");
while(list.hasPrevious()) {
String s3 = (String)list.previous();
System.out.println(s3);
}*/
while(list.hasNext()) {
String s2 = (String)list.next();
System.out.println(s2);
}
System.out.println("------------逆向打印------------------");
while(list.hasPrevious()) {
String s3 = (String)list.previous();
System.out.println(s3);
} } }

一个十分重要出现问题的点,也是面试经常会问到的点。并发修改错误。

问题: 我有一个集合,如下,请问,我想判断里面有没有"李宏灿"这个元素,如果有,我就添加一个元素到集合中,请写代码实现。

于是大部分人不知道这个并发修改错误的时候,会按照自己的逻辑按照以下代码实现:

  /*//创建迭代器(Iterator迭代器)(错误示范-----------------)
Iterator it = list.iterator();
//找到元素并进行添加张国兴
while(it.hasNext()) {
String s = (String)it.next();
if("李宏灿".equals(s)) {
list.add("123");
}
}
System.out.println("list:"+list);*/

结果,我们发现报错,可是我们的逻辑是没有错的,那到底错在哪呢?(报错:并发修改异常:ConcurrentModificationException

产生的原因:

  迭代器是依赖于集合而存在的,在判断成功后,集合中添加了新的元素,而迭代器却不知道你已经添加了新元素,所以就报错了,这个错叫并发修改异常。

如何解决呢:

  A: 迭代器迭代元素,迭代器修改元素,我们使用List集合特有的迭代器:ListIterator listerator()

    结果:元素是跟在刚才迭代查找到的元素的后面

  B:集合遍历元素,集合修改元素(普通的for循环实现)

    结果:在末尾进行添加

代码实现:

 package com.wyh.Iterator;

 import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator; /**
* @author WYH
* @version 2019年11月9日 下午7:51:26
*
* 并发修改异常:ConcurrentModificationException
*
*/
public class ListIteratorDemo2 {
public static void main(String[] args) {
//创建集合对象
List list = new ArrayList(); //创建字符串对象并将其添加到集合中去
list.add("王友虎");
list.add("李宏灿");
list.add("赵以浩");
list.add("齐博源");
list.add("李先锋"); /*//创建迭代器(Iterator迭代器)(错误示范-----------------)
Iterator it = list.iterator();
//找到元素并进行添加张国兴
while(it.hasNext()) {
String s = (String)it.next();
if("李宏灿".equals(s)) {
list.add("123");
}
}
System.out.println("list:"+list);*/ //方法1:创建ListIterator迭代器,迭代器调用add方法进行添加
ListIterator listt = list.listIterator();
while(listt.hasNext()) {
String s = (String)listt.next();
if("李宏灿".equals(s)) {
listt.add("张国兴"); //在找到的元素后面进行添加
}
}
System.out.println("list:"+list); //方法2:利用for循环直接对集合进行遍历,集合中有添加的方法
for(int i = 0;i<list.size();i++) {
String s = (String)list.get(i);
if(s.equals("李宏灿")) {
list.add("张果喜"); //在末尾进行添加
}
}
System.out.println("list:"+list); } }

大数据之路week01--自学之集合_2(列表迭代器 ListIterator)的更多相关文章

  1. 大数据之路week01--自学之集合_2(Iterator迭代器)

    选代器:是遍历集合的一种方式.迭代器是依赖于集合而存在的.我有一个集合: Collection c = new ArrayList();我们给集合中添加元素: c. add("hello' ...

  2. 大数据之路week01--自学之集合_2(List)

    在学习过了Collection之后,接下来我们将去学习List, 先看API文档: List集合的特有功能:(没有列出Collection也有的功能) A:添加功能  add(int index, E ...

  3. 大数据之路week01--自学之集合_1(Collection)

    经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...

  4. 大数据之路week01--day02_2 集合方面的总结

    (初稿 太晚了,明天再进行补充) 1.对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. (2)案例: 用数组存储5个学生对象,并遍历数组 ...

  5. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  6. 大数据之路week04--day03(网络编程)

    哎,怎么感觉自己变得懒了起来,更新博客的频率变得慢了起来,可能是因为最近得知识开始变得杂变得难了起来,之前在上课的时候,也没有好好听这一方面的知识,所以,现在可以说是在学的新的知识,要先去把新的知识思 ...

  7. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  8. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  9. 大数据之路day01_1--Java下载、安装等配置

    从今天开始,我就正式的走上大数据的道路了,如果说我为啥要去学习大数据,可能我的初衷是以后可以接触到人工智能方面的技术,后来在自学的过程中发现,学习人工智能,需要扎实的算法,以及对大量数据的处理,再者, ...

随机推荐

  1. sprigboot项目中配置xml格式的logback

    slf4j依赖和logback的依赖 idea中springboot项目的resources目录下新建logback-spring.xml文件,内容大致如下: <?xml version=&qu ...

  2. http post 请求,带参数,带请求头

    #!/usr/bin/env python # -*- coding: utf-8 -*- import requests import json url = 'http://............ ...

  3. 一文了解 Redis 内存监控和内存消耗

    Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.所以,监控 Redis 的内存消耗并了解 Redis 内存模型对高效并长期稳定使用 Redis ...

  4. 洛谷 P1717 钓鱼

    题目描述 话说发源于小朋友精心设计的游戏被电脑组的童鞋们藐杀之后非常不爽,为了表示安慰和鼓励,VIP999决定请他吃一次“年年大丰收”,为了表示诚意,他还决定亲自去钓鱼,但是,因为还要准备2013NO ...

  5. 车载导航应用中基于Sketch UI主题定制方案的实现

    1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式.压缩资源.插件等) 其实,针对不同的主题定制实 ...

  6. JZOJ5771【NOIP2008模拟】遨游

    Description      MWH寒假外出旅游,来到了S国.S国划分为N个省,第i个省有Ti座城市,编号分别为Ci1,Ci2,……CiTi(各省城市编号不会重复).所有城市间有M条双向的道路连接 ...

  7. Python编程系列---使用字典实现路由静态路由

    def index(): print('Index Page....') def bbs(): print('BBS Page....') def login(): print('Login Page ...

  8. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用

    1. 前言     在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...

  9. .NET Core3.0 日志 logging

    多年的经验,日志记录是软件开发的重要组成部分.没有日志记录机制的系统不是完善的系统.在开发阶段可以通过debug附件进程进行交互调试,可以检测到一些问题,但是在上线之后,日志的记录起到至关重要的作用. ...

  10. web常用知识

    Html 1.打电话,发短信和发邮件 <a href="tel:0755-10086">打电话给:0755-10086</a> <a href=&qu ...