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. Django_Form验证(三)字段,字段的参数,widgets种类

    Form工具是一个很强大的工具,所以他的功能不仅仅是上面2个例子,这里详细记录一下Form的其他功能 字段的一般参数,以CharFields为列子: user=fields.CharField( re ...

  2. 《CSAPP》 可重定位目标文件格式

    可重定位目标文件 ELF文件 ELF头以一个16字节的序列开始,这个序列描述了生成该文件的系统的字的大小和字节顺序.ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息.其中包括ELF头的大小 ...

  3. OpenJudge NOI 4976 硬币

    http://noi.openjudge.cn/ch0207/4976/ 描述 宇航员Bob有一天来到火星上,他有收集硬币的习惯.于是他将火星上所有面值的硬币都收集起来了,一共有n种,每种只有一个:面 ...

  4. 整合Spring框架和MyBatis框架

    ------------------------siwuxie095                                 整合 Spring 框架和 MyBatis 框架         ...

  5. mysql 报错You can't specify target table 'wms_cabinet_form' for update in FROM clause

    这个错误是说从t表select出来的无法又更新t表. 可以在select的时候先取个别名,弄个临时表即可.

  6. Python练习-列表生成式-2018.11.30

    #用列表生成式创建[1x1, 2x2, 3x3, ..., 10x10] print([x*x for x in range(1,11)]) #用列表生成式创建[2x2, 4x4,,6×6,..., ...

  7. 李白打酒——C++

    话说大诗人李白,一生好饮.幸好他从不开车.     一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱:     无事街上走,提壶去打酒.     逢店加一倍,遇花喝一斗.     这一路上,他 ...

  8. vscode快捷键的中文版

    自己整理了一份vscode快捷键的中文版本

  9. Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary

      允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chengxingliang.blog.51cto.com/3972944/886643 ...

  10. Python中的urllib

    urllib提供了一系列URL的功能. Get urllib的request模块可以非常方便的抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP响应: 例如,对豆瓣的一个URLht ...