Java之集合的遍历与迭代器
集合的遍历
依次获取集合中的每一个元素
将集合转换成数组,遍历数组
//取出所有的学号, 迭代之后显示学号为1004-1009 Object[] c=map.keySet().toArray();//取出学号转换为数组 System.out.println(c); for (int i = 0; i < c.length; i++) { int n=(int)c[i];//数组向下转型 if(n>=1004&&n<=1009){ System.out.println(n); } }
for循环与迭代器
package collectionTest; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class test { public static void main(String[] args) { List list=new ArrayList(); list.add("aaa"); list.add("ccc"); list.add("vvv"); list.add("bbb"); list.add("nnn"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } //foreach循环遍历,没有下标,需要的话可以自己定义 for(Object s:list){ System.out.println(s); } Iterator iter=list.iterator(); while(iter.hasNext()){//判断有没有下一个 System.out.println(iter.next()); } Map map=new HashMap(); map.put("aa", 1); map.put("bb", 2); map.put("cc", 3); map.put("dd", 4); Set set=map.keySet();//返回Set集合,存放map的键的值 for(Object o:set){ System.out.println(o);//输出对象的键 System.out.println(map.get(o));//输出对象的值,无序 } Iterator iter2=set.iterator(); while(iter2.hasNext()){//遍历 System.out.println(map.get(iter2.next())); } Collection c=map.values();//返回Collection Iterator iter3=c.iterator(); while(iter3.hasNext()){ System.out.println(iter3.next()); } } }
Iterator iterator():迭代器,集合的专用遍历方式
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test1 { public static void main(String[] args) { // 创建集合对象 Collection c = new ArrayList(); // 创建并添加元素 // String s = "hello"; // c.add(s); c.add("hello"); c.add("world"); c.add("java"); // Iterator iterator():迭代器,集合的专用遍历方式 Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态 // Object obj = it.next();返回下一个元素,然后跳到下一个,最开始因为本身没有所以返回的是第一个 // System.out.println(obj); // System.out.println(it.next());//返回下一个元素之后自身跳到下一个等待调用 // System.out.println(it.next()); // System.out.println(it.next()); // System.out.println(it.next()); // 最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了 // 判断是否有下一个元素,有就获取,没有就不搭理它 // if (it.hasNext()) { // System.out.println(it.next()); // } // if (it.hasNext()) { // System.out.println(it.next()); // } // if (it.hasNext()) { // System.out.println(it.next()); // } // if (it.hasNext()) { // System.out.println(it.next()); // } // if (it.hasNext()) { // System.out.println(it.next()); // } // 最终版代码 while (it.hasNext()) { // System.out.println(it.next()); String s = (String) it.next(); System.out.println(s);//如果这里输出的是it.next() 就会跳着输出下一个 } } }
for 迭代
for(Iterator it = c.iterator();it.hasNext();){ String s = (String) it.next(); System.out.println(s); }
这种方法的优势在于,循环结束后 Iterator it 就被销毁了,所以比使用while更加节约资源。
迭代器使用问题的探讨:
Iterator iter=list.iterator();//iterator返回的是子类对象,这里是多态 while(iter.hasNext()){ System.out.println("学生姓名:"+((Student)iter.next()).getName());//通过转型在调用getName方法 }
以上这种方法可以通过转型选择性的输出对象的信息,但是需要特别注意的是,输出只能调用一次 next 方法,如果多次调用 ,再次出现next就是下一个对象了。
迭代器的原理
迭代器为什么是一个接口而不是一个类?
如果迭代器是一个类,这样我们就可以创建迭代器的对象,使用该类的方法来事先集合的遍历。但是Java中有不同的集合类,这些类的数据结构也是不同的,所以存储方式和遍历方式也应该是不同的,所以使用将迭代器定义为一个类是不适合的。
无论是哪种集合,都应该具备获取元素的操作,并且最好在辅助与判断功能,这样在获取前先判断更不容易出错,也就是说判断功能和获取功能应该是一个集合所具备的,而每种集合的方式也不太一样,所以我们把这两个功能提取出来并不具体实现,这就是接口。
真正的实现类,在真正具体的子类中,以内部类的方式体现的。
迭代器的源码
public interface Inteator { boolean hasNext(); Object next(); } public interface Iterable { Iterator iterator(); } public interface Collection extends Iterable { Iterator iterator(); } public interface List extends Collection { Iterator iterator(); } public class ArrayList implements List { public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { public boolean hasNext() {} public Object next(){} } } Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add("java"); Iterator it = c.iterator(); //new Itr(); while(it.hasNext()) { String s = (String)it.next(); System.out.println(s); }
Java之集合的遍历与迭代器的更多相关文章
- java关于集合的遍历与增强for循环(foreach)的使用
java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 许多情况需要我们遍历出集合 ...
- Java自学-集合框架 遍历
遍历ArrayList的三种方法 步骤 1 : 用for循环遍历 通过前面的学习,知道了可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的 ...
- Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历
1. Collection的迭代器: Iterator iterator():迭代器,集合的专用遍历方式 2. 代码示例: package cn.itcast_03; import java.util ...
- Java 中List 集合索引遍历与迭代器遍历
package yzhou.iterator; import java.util.ArrayList; import java.util.HashSet; import java.util.Itera ...
- JAVA中集合转数组遍历
JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) { ...
- 对JAVA集合进行遍历删除时务必要用迭代器
java集合遍历删除的方法: 1.当然这种情况也是容易解决,实现方式就是讲遍历与移除操作分离,即在遍历的过程中,将需要移除的数据存放在另外一个集合当中,遍历结束之后,统一移除. 2.使用Iterato ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- Java集合框架概述和集合的遍历
第三阶段 JAVA常见对象的学习 集合框架概述和集合的遍历 (一) 集合框架的概述 (1) 集合的由来 如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序. 通常,程序 ...
随机推荐
- 在Caffe添加Python layer详细步骤
本文主要讨论的是在caffe中添加python layer的一般流程,自己设计的test_python_layer.py层只是起到演示作用,没有实际的功能. 1) Python layer 在caff ...
- python str转dict
两种方法 捷径 eval(str) >>> user = "{'name' : 'jim', 'sex' : 'male', 'age': 18}" >&g ...
- Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案
本文翻译自LMAX关于Disruptor的论文,同时加上一些自己的理解和标注.Disruptor是一个高效的线程间交换数据的基础组件,它使用栅栏(barrier)+序号(Sequencing)机制协调 ...
- Myeclipse中隐藏jar包
在package explorer的右上角有一个向下的小三角 点击选择Filter 在打开的对话框中 第一个选框中打上对勾 文字框中填上 *.jar 然后点击OK就行了 多个隐藏内容之间用逗号隔开 如 ...
- python实现微信接口(itchat)
python实现微信接口(itchat) 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实 ...
- 开源框架GreenDao的操作
1.为什么需要GreenDao?Google原生API不方便 @1手动组拼SQL语句 @2需要自己写操作数据库代码 @3不能把数据库中的数据映射成对象 @4没有实现关联查询 2.GreenDao是什么 ...
- Entity Framework入门教程:什么是Entity Framework
Entity Framework简介 Entity Framework是微软提供的一个O/RM(对象关系映射)框架.它基于ADO.NET,为开发人员提供了一种自动化的机制来访问和存储数据库中的数据. ...
- EventBus In eShop -- 解析微软微服务架构Demo(四)
引言 大家好像对分析源码厌倦了,说实在我也会厌倦,不过不看是无法分析其后面的东西,从易到难是一个必要的过程. 今天说下EventBus,前几天园里的大神已经把其解刨,我今天就借着大神的肩膀,分析下在e ...
- [leetcode-561-Array Partition I]
Given an array of 2n integers, your task is to group these integers into n pairs of integer,say (a1, ...
- 一个用 js 实现点阵图的编辑器演示
这是个客户的需求,具体大概是可以在一个 24*8 的点阵图上自由绘制图形,然后数据的存储是按列依次记录,用0和1分别表示是否选中,最终串成一个字符串. 整体需求难度并不复杂,所以在写demo的时候就尽 ...