Java集合类中Map接口下的相关类并没有像Collection接口的相关类一样实现get()方法,因此在要实现遍历输出的场景中没法直接用get()方法来取得对象中的数据,但Java本身提供了另一种遍历数据的方法,即用Iterator迭代器,虽然Iterator可以用来遍历读取数据,但它本质上不是一种方法,它只是一种设计模式,它是一个对象,一个“轻量级”的对象。下文讲讲Iterator在不同接口中的使用方法:

(一)Iterator在Collection接口中的使用。

   虽然Collection接口的相关类实现了get()方法,但将Iterator用在它们身上仍然是合适的,下面以ArrayList为例,讨论Iterator在Collection中的两中使用方法:

 1.配合while()循环实现遍历输出:

  

 ArrayList list = new ArrayList();
//此处省略list的具体赋值过程
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

while()中的判断条件it.hasNext()用于判断it中是否还有下一元素,有的话就继续循环,输出语句中的it.next()既可以使“指针”往后走一位,又能将当前的元素返回,用于输出。

 2.配合for()循环实现遍历输出:

 ArrayList list = new ArrayList();
//此处省略list的赋值过程
for(Iterator it = list.iterator();it.hasNext();){
System.out.println(it.next());
}

for()循环中的使用原理跟while()是一样的,在此就不再过多赘述。

不过上面的是在一般for()循环中的使用,我们还可以用for each 循环来代替Iterator,因为for each 本身就相当于一个迭代器了:

 ArrayList list = new ArrayList();
//此处同样省略list的赋值过程
for(Object array:list){
System.out.println(array);
}

需要注意的是for each 不适合用来增删元素,如果单纯用来遍历元素,这种写法也许会更简洁一点。

(二)Iterator在Map接口中的使用:

下文用HashMap为例,讨论迭代器的两种主要使用方法。

1.与while()的结合

 HashMap<K,V> myMap = new HashMap<K,V>();
//省略myMap的的赋值过程
Iterator<Map.Entry<K,V> it=myMap.entrySet().iterator();
while(it.hasNext()){
System.out.println(it.next());
} //如果想让输出更加格式化,可以自己重写toString()方法,由于toString方法的重写不是本文讨论的重点,所以暂且不讨论。

Map接口下的iterator应用方法与Collection中的略微有些不同,用到了entrySet()方法,entrySet()用来返回整个键—值对。

2.与for()的结合

 HashMap<K,V> myMap=new HashMap<K,V>();
//省略myMap的赋值过程
for(Iterator<Map.Entry<K,V>> it=myMap.entrySet().iterator();it.hasNext();){
System.out.println(it.next());
}

有上面几个例子的说明,这里就不用继续解释原理了。

同样这里再贴出for each代替Iterator的用法:

 HashMap<K,V> myMap=new HashMap<K,V>();
//省略myMap赋值过程
for(Object oj:myMap.entrySet()){
System.out.println(oj);
}

for each 中同样要用到entrySet()方法,具体如果对entrySet方法有疑问,请自行百度,本文不过多描述。

结语:由于Iterator类封装在java.util路径下,所以要使用Iterator需先import java.util.Iterator;或者import java.util.*;

本人其实也只是初学者,有出错的地方欢迎指正。

Java中迭代器Iterator的使用的更多相关文章

  1. Java中迭代器

    任何容器类,都必须有某种方法可以插入元素并将它们再次取回,毕竟,持有事物是容器最基本的工作,对于List,add()是出入元素的方法之一,而get()是取出元素的方法之一. 如果从更高层的角度思考,会 ...

  2. 小学生之Java中迭代器实现的原理

    一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator();wh ...

  3. Java 实现迭代器(Iterator)模式

    类图 /** * 自己定义集合接口, 相似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection ...

  4. Java中迭代器实现的原理

    一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator();wh ...

  5. java中的Iterator接口

    Iterator接口 Iterator接口也是Java集合框架的成员,但它与Collection系列.Map系列的集合不一样:Collection系列集合.Map系列集合主要用于盛装其他对象,而Ite ...

  6. Java集合迭代器 Iterator分析

    简介 迭代器是遍历容器的一种常用方法,它屏蔽了容器的实现细节,无需暴露数据结构内部,就可以对容器进行遍历,迭代器本身也是一种设计模式,迭代是一种特殊的遍历方式. Iterator 在java中,迭代器 ...

  7. java中的Iterator和ListIterator的区别

    (一)iterator迭代器 Collection的iterator方法返回一个实现了一个Iterator接口的对象 Iterator接口中包含三个方法: 1)E next() 2)boolean h ...

  8. java集合---迭代器iterator

    一:ArraryList  最终继承超级接口Collection,Colection接口继承Iterator接口. public interface Collection<E> exten ...

  9. java中迭代器应用

    本文将利用分析代码的方式,来学习一个集合类的内部结构,以及遍历集合的迭代模式的源码实现细节. 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应It ...

随机推荐

  1. Cell

    首先需要创建一个model类,继承于NSObject: 定义两个属性: @property(nonatomic,retain)NSString imageName; @property(nonatom ...

  2. Java温故而知新-杨辉三角形

    Java温故而知新-杨辉三角形 一. 先说需求 需求 打印输出杨辉三角形,行数可变,支持50行内的任意数. 预期结果如图所示 1 这是第几行呢,是第1 1 1 这是第几行呢,是第2 1 2 1 这是第 ...

  3. string,char*,int 之间的转化

    c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...

  4. python基础教程(二)

    继续第一篇的内容,讲解,python的一些基本的东西. 注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. >>> #获得用户名: > ...

  5. dispatch emit broadcast

    1.broadcast 事件广播 遍历寻找所有子孙组件,假如子孙组件和componentName组件名称相同的话,则触发$emit的事件方法,数据为 params. 如果没有找到 则使用递归的方式 继 ...

  6. vue 父子组件传参

    父向子组件传参 例子:App.vue为父,引入componetA组件之后,则可以在template中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,component ...

  7. asp.net mvc 4 项目升级到 asp.net mvc5

    一.开始 1.打开或新建asp.net mvc 4项目 2.修改 global.asax文件 原: WebApiConfig.Register(GlobalConfiguration.Configur ...

  8. Netty自娱自乐之类Dubbo RPC 框架设计构想 【上篇】

    之前在前一篇的<Netty自娱自乐之协议栈设计>,菜鸟我已经自娱自乐了设计协议栈,gitHub地址为https://github.com/vOoT/ncustomer-protocal.先 ...

  9. 数据库学习任务二:数据库连接对象SqlConnection

    数据库应用程序的开发流程一般主要分为以下几个步骤: 创建数据库 使用Connection对象连接数据库 使用Command对象对数据源执行SQL命令并返回数据 使用DataReader和DataSet ...

  10. 原生的AJAX

    var XHR=null; if (window.XMLHttpRequest) { // 非IE内核 XHR = new XMLHttpRequest(); } else if (window.Ac ...