(请关注 本人“Collection集合”博文——《详解 Collection集合》

Iterator接口(迭代器):

概述:

collection 进行迭代的迭代器

在我们现阶段的学习中,只需要理解这个接口所提供的三个方法即可:

  • boolean hasNext()

    如果仍有元素可以迭代,则返回 true。
  • E next()

    返回迭代的下一个元素。
  • void remove()

    从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

现在,本人来通过一段代码来展示下迭代器的使用方法:

package com.youzg.about_iterator.core;

import java.util.*;

public class Test {

    public static void main(String[] args) {
Collection arrayList = new ArrayList(); //由于ArrayList是Collection的实现类,所以我们可以这样去实例化一个Collection子类的对象
arrayList.add(1000);
arrayList.add(2000);
arrayList.add(3000);
arrayList.add(4000);
arrayList.add(5000);
arrayList.add(6000); Iterator iterator = arrayList.iterator(); //我们必须通过这个方法得到迭代器,才能在之后通过迭代器遍历集合
System.out.println(iterator); while (iterator.hasNext()) { //判断是否还有下一个元素
Object next = iterator.next(); //把指针狭义
System.out.println(next); //获取下一个元素
}
}
}

现在,本人来展示下运行结果:

下图是它的实现类和子接口:



Collection类有List类。

相应地,Iterator类也有ListIterator子类,

因为我们未来的编程对于List这个接口的使用比较频繁,所以,在这里,本人再来讲解一下有关ListIterator的知识点:

ListIterator接口:

  • void add(E e)

    将指定的元素插入列表(可选操作)。
  • boolean hasNext()

    以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
  • boolean hasPrevious()

    如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。 E next()

    返回列表中的下一个元素。
  • int nextIndex()

    返回对 next 的后续调用所返回元素的索引。
  • E previous()

    返回列表中的前一个元素。
  • int previousIndex()

    返回对 previous 的后续调用所返回元素的索引。
  • void remove()

    从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
  • void set(E e)

    用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。

因为比 Iterator接口 多了一些方法,所以,我们可以对于一个List进行反向遍历

那么,现在,本人通过一段代码来展示下:

package edu.youzg.about_collection.core;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator; public class Test { public static void main(String[] args) {
List arrayList = new ArrayList(); arrayList.add(1001);
arrayList.add(1002);
arrayList.add(1003);
arrayList.add(1004); //正向迭代
ListIterator listIterator = arrayList.listIterator();
while (listIterator.hasNext()){
Object next = listIterator.next();
System.out.println(next);
} System.out.println("==================="); //反向迭代:注意进行反向迭代器前,先进行正向迭代
// ListIterator listIterator2 = arrayList.listIterator();
while (listIterator.hasPrevious()){ //判断有没有上一个元素
Object previous = listIterator.previous(); //获取上一个元素
System.out.println(previous);
} } }

现在,本人来展示下运行结果:



讲到这里,相信同学们也差不多学会了该如何使用迭代器来遍历集合了,那么,现在本人来讲解一个非常常见的“异常”—— ConcurrentModificationException

ConcurrentModificationException异常:

定义

定义

并发修改异常

出现原因

出现原因

我们的迭代依赖于集合, 当我们往集合中添加好了元素之后 获取迭代器 那么迭代器已经知道了集合的元素个数

这个时候你在遍历的时候又突然想给 集合里面增、删、改元素(用的是集合的add方法),就会与已生成的迭代器对于数量的记录产生冲突,就会报异常

解决方法

解决方法

ListIterator迭代器遍历 用迭代器自带的add、remove、set方法添加元素 那就不会报错了

(Collection链接:https:////www.cnblogs.com/codderYouzg/p/12416566.html

(集合总集篇链接:https://www.cnblogs.com/codderYouzg/p/12416560.html

详解 迭代器 —— Iterator接口、 ListIterator接口 与 并发修改异常的更多相关文章

  1. Java API —— List接口&ListIterator接口

    1.List接口概述         有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索 ...

  2. java-Collection集合、List集合、Vector集合和迭代器Iterator、ListIterator的使用

    1.对象数组的概述和使用 * A:案例演示 * 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. * Student[] arr = new Student ...

  3. 日历类和日期类转换 并发修改异常 泛型的好处 *各种排序 成员和局部变量 接口和抽象类 多态 new对象内存中的变化

    day07 ==和equals的区别? ==用于比较两个数值 或者地址值是否相同.  equals 用于比较两个对象的内容是否相同   String,StringBuffer.StringBuilde ...

  4. Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  5. 集合框架之——迭代器并发修改异常ConcurrentModificationException

    问题: 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. 使用普通迭代器出现的异常: ...

  6. Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案

    1. 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. ConcurrentModi ...

  7. 大杂烩 -- Iterator 并发修改异常ConcurrentModificationException

    基础大杂烩 -- 目录 大杂烩 -- Java中Iterator的fast-fail分析 大杂烩 -- Iterator 和 Iterable 区别和联系 问题: 在集合中,判断里面有没有" ...

  8. 集合--Collection接口详解&&迭代器

    /* * 集合的顶层接口--Collection接口 * 添加 * add() * addAll() * * 遍历集合 * iterator() 迭代器 * * 删除 * remove() * rem ...

  9. 【Java入门提高篇】Day20 Java容器类详解(三)List接口

    今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...

随机推荐

  1. 【前端词典】这些功能其实不需要 JS,CSS 就能搞定

    前言 今天我们大家介绍一些你可能乍一眼以为一定需要 JavaScript 才能完成的功能,其实 CSS 就能完成,甚至更加简单. 内容已经发布在 gitHub 了,欢迎围观 Star,更多文章都在 g ...

  2. 开发一个基础的npm包

    初始化项目 # 新建文件夹 mkdir whosmeya-npm-package-test # 进入 cd whosmeya-npm-package-test/ # 初始化 package.json, ...

  3. Python python 数据类型--集

    # set 集 '''Python还包括集合的数据类型.集合是无序集合,没有重复元素. 基本用途包括成员资格测试和消除重复条目. 集合对象还支持数学运算,如并集,交集,差异和对称差异. ''' nam ...

  4. 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

    目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系 ...

  5. css 动画 transition和animation

    本文参考:http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html 1. transition基本用法: < ...

  6. MATLAB 一维随机变量及其概率分布

    1.两点分布 clc clear a=rand(1,10); for ii=1:10 if a(ii)<0.2 a(ii)=0; else a(ii)=1; end end a x=0的概率为0 ...

  7. Java系列之数组

    原文首发于微信公众号:jzman-blog,欢迎关注交流! 本来打算温习一下注解方面的内容作为今天的推送,但是来不及写了,那就一起来看一下数组,数组是用来存放一组具有相同类型数据的数据结构,通过下标来 ...

  8. cxk不会二进制 (贪心)

    cxk不会二进制 Description 最近cxk迷上了二进制,他很菜,有道简单的题不会做,挂在这里求大佬做一下: 以二进制形式给出两个数字:x,y.令s = x + y * 2 ^ k.输出能使 ...

  9. 运行npm安装wepy2踩坑error EEXIST 问题

    windows 10安装wepy2 以前用过wepy1,现在要学习wepy2,运行以下命令出错 npm install @wepy/cli -g # 全局安装 WePY CLI 工具 打开log文件, ...

  10. PTA数据结构与算法题目集(中文) 7-9

    PTA数据结构与算法题目集(中文)  7-9 7-9 旅游规划 (25 分)   有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游 ...