Iterator接口,翻译成中文是迭代器

迭代器的概念通俗解释:

java中有很多的集合,内部有各种存储方法,取出的方式也各不相同,是否可以有一种通用的方式来获取呢?

这种方式类似for循环遍历,

通用获取方式:取出元素之前判断集合中有没有这个元素,如果有,就取出来;继续判断,如果还存在那么继续取出,直到全部取出为止,这种取出就是迭代

迭代器的实现:

(将ArrayList集合换成其他的集合,也可以实现)

package demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class IteratorDemo {
public static void main(String[] args) {
Collection<String>c1 = new ArrayList<String>();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
Iterator<String> it1 = c1.iterator();
boolean b1 = it1.hasNext();//是否有元素可以被取出
System.out.println(b1);//true
//获取元素
while(it1.hasNext()){
String s = it1.next();
System.out.println(s);
}
}
}

集合迭代中的转型:
建议加入类型,但是不加入也可以执行:

package demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class CollectionDemo {
public static void main(String[] args) {
//集合可以存储任意类型的对象
//集合中,不指定存储的数据类型,也可以存储
Collection c1 = new ArrayList();
c1.add("abc");
c1.add("def");
Iterator it1 = c1.iterator();
while(it1.hasNext()){
//it.next获取Object类型,强制转换
String s1 = (String)it1.next();
System.out.println(s1.length());
}
}
}

利用迭代器的原理,在JDK1.5之后出现了增强for循环:

增强for循环遍历数组示例:

package demo;
//增强for循环,有固定格式 //好处:代码少了,方便遍历
//弊端:没有索引,不能操作容器里面的元素
public class ForEachDemo {
public static void main(String[] args) {
function1();
function2();
} public static void function1(){
int[] arr = {3,2,5,4,8,9,6};
//遍历输出
for(int i :arr){
System.out.println(i);
}
} public static void function2(){
//遍历的时候,可以调用对象的方法
String[] str1 = {"abc","def","java"};
for(String s:str1){
System.out.println(s);
System.out.println(s.length());
}
}
}

增强for循环遍历集合示例:

package demo;

import java.util.ArrayList;

//增强for循环,有固定格式
public class ForEachDemo {
public static void main(String[] args) {
function();
} public static void function() {
ArrayList<String> array1 = new ArrayList<String>();
array1.add("abcd");
array1.add("java");
for (String s : array1) {
System.out.println(s);
}
}
}

迭代器并发修改异常:

在面试中偶尔会遇到,这里做简单介绍

package demo;

import java.util.ArrayList;
import java.util.Iterator; //迭代器的并发修改异常
//即不允许在迭代过程中修改集合
public class Demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
Iterator<String> it1 = list.iterator();
while (it1.hasNext()) {
String s1 = it1.next();
/*
* 加入这段代码则会出现异常
*
* if(s1.equals("abc3")){ list.add("abc"); }
*/
System.out.println(s1);
}
}
}

Java学习笔记28(集合框架二:Iterator迭代器)的更多相关文章

  1. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  2. 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator

    public class Person implements Comparable{ private String name; private int age; public Person(){ su ...

  3. 【Java学习笔记】<集合框架>对字符串进行长度排序

    package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...

  4. Java学习笔记之---集合

    Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...

  5. java学习笔记之OOP(二)

    java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...

  6. Java基础学习笔记十七 集合框架(三)之Map

    Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...

  7. JavaSE 学习笔记之集合框架(十八)

    集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...

  8. Java学习笔记之集合

    集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...

  9. 【原】Java学习笔记026 - 集合

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...

随机推荐

  1. ArcGIS自定义工具箱-修复损坏的工作空间

    ArcGIS自定义工具箱-修复损坏的工作空间 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:替换数据源的工作空间 用途:针对损坏的数据源,批量进行修复 案例数 ...

  2. Ansible运维工具

    1.Ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式.可以通过命令行或者GUI来使用Ansible,运行Ansible的服务器这里俗称“管理节点”: ...

  3. P1880 [NOI1995]石子合并-(环形区间dp)

    https://www.luogu.org/problemnew/show/P1880 解题过程:本次的题目把石子围成一个环,与排成一列的版本有些不一样,可以在后面数组后面再接上n个元素,表示连续n个 ...

  4. SQLLDR导入乱码问题的解决

    SQLLDR导入乱码问题的解决   处理过程: 1.本地建立控制文件   load data infile 'd:\TMP_KAITOUSHUJU.csv' into table TMP_KAITOU ...

  5. 《Effective C++》笔记

    01:视c++为一个语言联邦 为了理解C++,必须要认识其主要的次语言: C 说到底C++仍是以C为基础.区块,语句,预处理器,内置数据类型,数组,指针统统来自C. Object-Oreinted C ...

  6. Python设计模式 - UML - 类图(Class Diagram)

    简介 类图是面向对象分析和设计的核心,用来描述系统各个模块中类与类之间.接口与接口之间.类与接口之间的关系,以及每个类的属性.操作等特性,一般在详细设计过程中实施. 类图本身就是现实世界的抽象,是对系 ...

  7. Cobbler安装CentOS7系统时报错 What do you want do now?

    问题的根源: 在cobbler服务主机中执行了  createrepo --update  /var/www/cobbler/ks_mirror/CentOS-7-x86_64/ 导致的. cobbl ...

  8. vue 和 react 路由跳转和传参

                      react  1 .跳转方式加传参 this.props.history.push({ //地址 pathname: '/film/Details', //路由传参 ...

  9. [leetcode]95. Unique Binary Search Trees II给定节点形成不同BST的集合

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  10. java ssh执行shell脚本

    1.添加依赖 com.jcraft:jsch ch.ethz.ganymed:ganymed-ssh2:262 2.获取连接 conn = new Connection(ip, port); conn ...