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. vagrant 同时设置多个同步目录

    修改Vagrantfile文件 如下所示 config.vm.synced_folder "./", "/var/www/pyxis2", owner: &qu ...

  2. GDI+_SavePic

    Option Explicit Private Const EncoderQuality As String = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB ...

  3. 使用openpyxl复制整张sheet

    通过无能的baidu逛了一圈,发现有两三段能用的代码,不过参考之下,发现还有不足的: 不能拷贝有合并格式的sheet.没有拷贝cell的相关格式(填充.边框.对齐)等参数 所以通过bing继续发掘,最 ...

  4. R语言-增加图例

    legend()函数 > plot(rain$Tokyo,type="l",col="red", + ylim=c(0,300), + main=&quo ...

  5. Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS

    [Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS] 1.通过 VPOS / WPOS 语义获取. VPOS 是 HLSL 中 对 屏幕 坐标 的 语义, 而 WPOS 是 ...

  6. 【Django】数据迁移问题

    最近发现,Django在修改models之后重新生成迁移文件(这里可以生成),再进行数据库迁移的时候老是出错,查询数据库时老是找不到表格或者字段. 尝试过重新新建项目,新建一个同名APP,然后mode ...

  7. JDK、JRE、JVM的区别

    JDK: JDK(Java Development Kit)顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的.它除了包括完整的JRE(Java Runtime Environment),Jav ...

  8. 网页屏蔽f12、右键菜单等操作

    1.屏蔽f12 document.onkeydown = function(){ if(window.event && window.event.keyCode == 123) { a ...

  9. 【python深入】装饰器理解及使用

    装饰器,其实就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下额外增加功能,装饰器的返回是一个函数对象. 用一个例子来说明一下什么是函数对象: 从这里可以看到,直接在函数后面加bar(),就 ...

  10. easyui 改变单元格背景颜色

    另外一种方法:https://www.cnblogs.com/raitorei/p/9989649.html easyui的datagrid改变整行颜色:https://www.cnblogs.com ...