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

简介: 不知道大家有没有看过我前面的迭代器设计模式的文章,这里我假设大家明白迭代器设计模式的原理...不明白去看前面的一篇 其实在java中对于迭代器的设计无非也就是这种模式 ... 我们知道在遍历容器的时候 例如ArrayList 我们可以对其进行get 和add ...add是从Collecton实现的一个方法...而get是 ArrayList单独添加 的 即不是通用接口。

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

其实在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());
		  
	}

}


 

 

 

 

 

 

 

目录
相关文章
|
8月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
235 1
|
存储 缓存 安全
Java 集合容器常见面试题及详细解析
本文全面解析Java集合框架,涵盖基础概念、常见接口与类的特点及区别、底层数据结构、线程安全等内容。通过实例讲解List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)等核心组件,帮助读者深入理解集合容器的使用场景与性能优化。适合准备面试或提升开发技能的开发者阅读。
234 0
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
4807 113
|
缓存 Java API
Java 集合容器实操技巧与案例详解
本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。
304 0
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
561 23
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
361 2
Java容器及其常用方法汇总
|
监控 Java 中间件
8G的容器Java堆才4G怎么就OOM了?
本文记录最近一例Java应用OOM问题的排查过程,希望可以给遇到类似问题的同学提供参考。
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
557 3
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
934 1