java关于迭代器的分析...设计更通用的容器遍历方法

不知道大家有没有看过我前面的迭代器设计模式的文章,这里我假设大家明白迭代器设计模式的原理...不明白去看前面的一篇

其实在java中对于迭代器的设计无非也就是这种模式 ... 我们知道在遍历容器的时候

例如ArrayList 我们可以对其进行get 和add ...add是从Collecton实现的一个方法...而get是 ArrayList单独添加 的 即不是通用接口。

在HashSet中就不存在get ...

既然面向对象思想的目的之一是代码重用.那么我们是否可以对于这些容器类进行统一的处理呢?

Iterator 迭代器接口 有如下三个方法提供迭代功能,在每个实现了Iterator接口的类中必须实现这三个方法


 boolean


hasNext()

          如果仍有元素可以迭代,则返回 true。


 E


next()

          返回迭代的下一个元素。


 void


remove()

          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

每一个实现了 Collection接口的类都有一个 iterator方法可以返回一个 Iterator迭代器对象,当然这里 其实是Iterator的实现类的对象,

只不过我们向上转型,吧他看作是Iterator 而已。。。我这里我们说返回就是Iterator  具体实现原理看我的上一篇 迭代器设计模式的实现。。下面看一个利用迭代器实现对容器的统一操作。。

 

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class MyIterator {
	public static void showContainer(Iterator<String> it) {
		while(it.hasNext()){
			System.out.println(it.next());
			it.remove() ;
		}

	}
	public static void main(String []agrs)
	{
		  Collection<String> c=new ArrayList<String>();
		  Collection<String> s=new HashSet<String>();
		  c.addAll(new ArrayList<String>(){
				private static final long serialVersionUID = 1L;
				{
					  add("one")  ;
					  add("two")  ;
					  add("three")  ;
					  add("four")  ;
				  }
			  }) ;

		  s.addAll(new HashSet<String>(){
				private static final long serialVersionUID = 1L;
				{
					  add("four")  ;
					  add("one")  ;
					  add("two")  ;
					  add("three")  ;
					  add("four")  ;
				  }
			  });
		 System.out.println("------------------");
		  MyIterator.showContainer(c.iterator() ) ;
		  System.out.println(c.size());
		  System.out.println("-----------------");
		  MyIterator.showContainer(s.iterator()) ;
		  System.out.println(s.size());

	}

}

 

 

 

 

 

 

 

时间: 2024-09-29 07:04:52

java关于迭代器的分析...设计更通用的容器遍历方法的相关文章

jQuery通用的全局遍历方法$.each()用法实例_jquery

本文实例讲述了jQuery通用的全局遍历方法$.each()用法.分享给大家供大家参考,具体如下: 1.test.json文件代码: [ { "username": "张三", "content": "沙发." }, { "username": "李四", "content": "板凳." }, { "username": &q

通过分析设计的方法验证UED价值

首先说明一点,本文中提到的UED基本都指交互设计. 一.为什么需要数据验证? "天天看到你们也挺忙的,但是怎么衡量游戏用户体验提升了多少." 是的,高层对战略方向关注的更多,不可能了解每个员工所有的工作细节,尤其是我们是做用户体验的.在最终的游戏体验里,能看到漂亮的视觉.有趣 的玩法,却唯独感觉不到交互多美妙.其实交互设计的追求恰恰是"让用户感觉不到界面的存在",只有感觉不到界面的存在,才能沉浸在游戏里,感受身临其境的 愉悦,感受玩法的趣味. 对于大多数公司来说,高

通过分析设计的方法验证交互设计价值

奇遇首发于昆仑用户体验团队博客,转载请注明. 一.为什么需要数据验证? "天天看到你们也挺忙的,但是怎么衡量游戏的用户体验提升了多少?" 是的,高层对战略方向关注的更多,不可能了解每个员工所有的工作细节.在最终的http://www.aliyun.com/zixun/aggregation/18698.html">游戏体验里,能看到漂亮的视觉.有趣的玩 法,却唯独感觉不到交互多美妙.其实交互设计的追求恰恰是"让用户感觉不到界面的存在",只有感觉不到界

Java NIO原理图文分析及代码实现

[本文转载于Java NIO原理图文分析及代码实现] 前言:  最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http://weixiaolu.iteye.com/blog/

解析Java的迭代器中的fast-fail错误检测机制_Android

fail-fast 机制是java集合(Collection)中的一种错误机制.当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件.例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了:那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件. fail-fast 机制是java集合(Collection)中的一种错误机制.当多个线程对同一个集合的内容进行操作时,

我的Java开发学习之旅------&amp;gt;JAVA IO 设计模式彻底分析

本文转载于网络. 一.引子(概括地介绍Java的IO) 无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充.它采用了流的 机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或Source of Stream)出来,到某个目的地(称为流汇或Sink of Stream)去的.由流的方向,可以分成输入流和输出流,一个程序从输入流读取数据向输出流写数据. 如,一个程序可以用FileInputStream类

四个步骤:如何让网站分析报告更有价值

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 从哪里入手撰写网站分析报告?报告中应该选择和使用哪些指标?如何让分析结果更有价值?这些都是在我们在撰写网站分析报告时经常遇到的问题.本篇文章分享一个创建网站分析报告的流程,通过四个步骤让分析报告变的更有价值. 一, 明确分析目的,挖掘有价值的分析需求 网站的商业目的产生分析需求,而需求的价值则直接影响分析结果的价值.因此在开始撰写一份网站分析

dao-关于如何设计一个通用DAO和验证框架 及几个问题

问题描述 关于如何设计一个通用DAO和验证框架 及几个问题 工作中遇到的几个问题,自己不太有把握,请大家不吝赐教,可以讨论,非常着急,最好能有比较详细的代码,在此万分感谢了!! 在JavaEE的开发中,一个比较好的做法是采用通用的DAO,其中包含类似 save.delete.findXXX.countXXX之类的方法. 请设计和编写一个通用DAO,它继承自Hibernate, 其中包含delete. findById. findByExample.countByExample等方法. 其中 fi

让网站分析报告更有价值应该怎么做?

从哪里入手撰写网站分析报告?报告中应该选择和使用哪些指标?如何让分析结果更有价值?这些都是在我们在撰写网站分析报告时经常遇到的问题.本篇文章分享一个创建网站分析报告的流程,通过四个步骤让分析报告变的更有价值. 一, 明确分析目的,挖掘有价值的分析需求 网站的商业目的产生分析需求,而需求的价值则直接影响分析结果的价值.因此在开始撰写一份网站分析报告前,我们先要仔细思考并充分挖掘分析需求的价值.那么,什么样的分析需求是有价值的分析需求呢?我们先来看三类最常见的客户分析需求. 第一类客户有明确的分析需