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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 不知道大家有没有看过我前面的迭代器设计模式的文章,这里我假设大家明白迭代器设计模式的原理...不明白去看前面的一篇 其实在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());
		  
	}

}


 

 

 

 

 

 

 

目录
相关文章
|
1月前
|
Java 调度
Java中常见锁的分类及概念分析
Java中常见锁的分类及概念分析
18 0
|
1月前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
15 0
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2
|
1天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
9 1
|
2天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
12 0
|
2天前
|
存储 安全 Java
Java一分钟之-数组的创建与遍历
【5月更文挑战第8天】本文介绍了Java中数组的基本概念、创建与遍历方法,强调了类型匹配和数组越界问题。示例展示了如何创建整数数组并初始化元素,同时提供了避免数组越界的策略。对于遍历,文章提到了for循环和增强型for循环,并给出了防止错误的建议,如正确声明类型、初始化数组、安全索引操作及使用合适的数据结构。遵循这些指导可帮助开发者有效管理Java数组并减少错误。
11 0
|
11天前
|
Java
JAVA循环结构分析与设计
JAVA循环结构分析与设计
18 1
|
13天前
|
网络协议 物联网 Java
Go与Java:在物联网领域的适用性分析
本文对比分析了Go和Java在物联网领域的适用性。Go语言因其轻量级、高效和并发特性,适合资源受限的物联网设备,特别是处理并发连接和数据流。Java则凭借跨平台性、丰富的生态系统和企业级应用能力,适用于大型物联网系统和复杂业务场景。两者在物联网领域各有优势,开发者可根据项目需求选择合适的语言。
|
16天前
|
存储 算法 Java
盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
30 0
|
17天前
|
Java
【Java基础】面向对象和内存分析
【Java基础】面向对象和内存分析
16 0