大数据之路week01--自学之集合_2(列表迭代器 ListIterator)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了大数据之路week01--自学之集合_2(列表迭代器 ListIterator),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3412字,纯文字阅读大概需要5分钟。
内容图文
![大数据之路week01--自学之集合_2(列表迭代器 ListIterator)](/upload/InfoBanner/zyjiaocheng/1093/3f0932f72ffa42fb94b5c35314e0f270.jpg)
列表迭代器:
ListIterator listerator():List集合特有的迭代器
该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法
特有功能:
Object previous();获取上一个元素
boolean hasPrevious():判断是否有元素
注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用
1 package com.wyh.Iterator; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 import java.util.ListIterator; 7 8 /** 9 * @author WYH 10 * @version 2019年11月9日 下午7:31:41 11 * 12 * ListIterator : List集合特有的迭代器 13 * 14 */ 15 public class ListIteratorDemo1 { 16 public static void main(String[] args) { 17 // 创建集合 18 List i = new ArrayList(); 1920//创建字符串对象并将其添加到集合中21 i.add("王友虎"); 22 i.add("李宏灿"); 23 i.add("赵以浩"); 24 i.add("齐博源"); 25 i.add("李先锋"); 2627//ListIterator 继承了 Iterator,所以可以用它的实现28 Iterator it = i.iterator(); 29while(it.hasNext()) { 30 String s = (String)it.next(); 31 System.out.println(s); 32 } 33 System.out.println("----------------------"); 343536// previous()逆向打印37 ListIterator list = i.listIterator(); 38/*//如果逆向打印处于第一个位置,输出为空 39 * System.out.println("------------逆向打印------------------"); 40 while(list.hasPrevious()) { 41 String s3 = (String)list.previous(); 42 System.out.println(s3); 43 }*/44while(list.hasNext()) { 45 String s2 = (String)list.next(); 46 System.out.println(s2); 47 } 48 System.out.println("------------逆向打印------------------"); 49while(list.hasPrevious()) { 50 String s3 = (String)list.previous(); 51 System.out.println(s3); 52 } 53545556 } 5758 }
一个十分重要出现问题的点,也是面试经常会问到的点。并发修改错误。
问题: 我有一个集合,如下,请问,我想判断里面有没有"李宏灿"这个元素,如果有,我就添加一个元素到集合中,请写代码实现。
于是大部分人不知道这个并发修改错误的时候,会按照自己的逻辑按照以下代码实现:
1 /* //创建迭代器(Iterator迭代器)(错误示范-----------------) 2 Iterator it = list.iterator(); 3 //找到元素并进行添加张国兴 4 while(it.hasNext()) { 5 String s = (String)it.next(); 6 if("李宏灿".equals(s)) { 7 list.add("123"); 8 } 9 } 10 System.out.println("list:"+list); */
结果,我们发现报错,可是我们的逻辑是没有错的,那到底错在哪呢?(报错:并发修改异常:ConcurrentModificationException)
产生的原因:
迭代器是依赖于集合而存在的,在判断成功后,集合中添加了新的元素,而迭代器却不知道你已经添加了新元素,所以就报错了,这个错叫并发修改异常。
如何解决呢:
A: 迭代器迭代元素,迭代器修改元素,我们使用List集合特有的迭代器:ListIterator listerator()
结果:元素是跟在刚才迭代查找到的元素的后面
B:集合遍历元素,集合修改元素(普通的for循环实现)
结果:在末尾进行添加
代码实现:
1 package com.wyh.Iterator; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.ListIterator; 6 7 /** 8 * @author WYH 9 * @version 2019年11月9日 下午7:51:26 10 * 11 * 并发修改异常:ConcurrentModificationException 12 * 13 */ 14 public class ListIteratorDemo2 { 15 public static void main(String[] args) { 16 // 创建集合对象 17 List list = new ArrayList(); 1819//创建字符串对象并将其添加到集合中去20 list.add("王友虎"); 21 list.add("李宏灿"); 22 list.add("赵以浩"); 23 list.add("齐博源"); 24 list.add("李先锋"); 2526/*//创建迭代器(Iterator迭代器)(错误示范-----------------) 27 Iterator it = list.iterator(); 28 //找到元素并进行添加张国兴 29 while(it.hasNext()) { 30 String s = (String)it.next(); 31 if("李宏灿".equals(s)) { 32 list.add("123"); 33 } 34 } 35 System.out.println("list:"+list);*/3637//方法1:创建ListIterator迭代器,迭代器调用add方法进行添加38 ListIterator listt = list.listIterator(); 39while(listt.hasNext()) { 40 String s = (String)listt.next(); 41if("李宏灿".equals(s)) { 42 listt.add("张国兴"); //在找到的元素后面进行添加43 } 44 } 45 System.out.println("list:"+list); 4647//方法2:利用for循环直接对集合进行遍历,集合中有添加的方法48for(int i = 0;i<list.size();i++) { 49 String s = (String)list.get(i); 50if(s.equals("李宏灿")) { 51 list.add("张果喜"); //在末尾进行添加52 } 53 } 54 System.out.println("list:"+list); 55565758 } 5960 }
原文:https://www.cnblogs.com/wyh-study/p/11827935.html
内容总结
以上是互联网集市为您收集整理的大数据之路week01--自学之集合_2(列表迭代器 ListIterator)全部内容,希望文章能够帮你解决大数据之路week01--自学之集合_2(列表迭代器 ListIterator)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。