`

Iterable接口和iterator接口

 
阅读更多

1.     实现了Iterable接口类,必须实现方法:

@Override
	public Iterator<T> iterator() {
		// TODO Auto-generated method stub
		return null;
	}

 2,     而实现了Iterator接口的类,必须实现方法:

         @Override
	public boolean hasNext() {  
		// TODO Auto-generated method stub
	        return null;  
    }  

	@Override
	public T next() {  
        // TODO Auto-generated method stub
        return null;  
    }  

	@Override
	public void remove() {
		// TODO Auto-generated method stub
            }

 

通过观察发现,要是实现了Iterable接口,就要返回一个Iterator。所以可以看出来这两个接口的联系是十分紧密的。

实现了Iterable接口的类,就可以使用foreach的形式遍历该类的元素了。例如,如下两种形式的输出是一样的:

String[] arr="hello i am your god.".split(" ");
		MyIterable myIterable=new MyIterable(arr);
 
                //第一种
		Iterator<String> iterator=myIterable.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		System.out.println("***************************************");

                //第二种
		for(String str : myIterable){
			System.out.println(str);
		}

 

到这里,姑且给两个例子看看:

第一个:

package com.wjy.iterable;

import java.util.Iterator;

import com.wjy.iterator.MyIterator;

public class MyIterable implements Iterable<String>{

	private String[] arr;
	public MyIterable(String[] arr){
		this.arr=arr;
	}
	@Override
	public Iterator<String> iterator() {
		// TODO Auto-generated method stub
		return new MyIterator(arr);
	}
}
package com.wjy.iterator;

import java.util.Iterator;

public class MyIterator implements Iterator<String>{

	private String[] arr;
	private int index=-1;
	private int size;
	
	public MyIterator(String[] arr) {
		// TODO Auto-generated constructor stub
		this.arr=arr;
		this.size=arr.length;
	}
	@Override
	public boolean hasNext() {  
		 boolean flag =  index < size - 1;  
	        if (index == size -1) {  
	            index = -1;  
	        }  
	          
	        return flag;  
    }  

	@Override
	public String next() {  
        if (index < size - 1) {  
            index++;  
            return arr[index];  
        }  
          
        return null;  
    }  

	@Override
	public void remove() {
		// TODO Auto-generated method stub
		for (int i = size - 1; i >= 0; i--) {  
            if (arr[i] != null) {  
                arr[i] = null;  
                return;  
            }  
        }  
	}

}

  测试代码:

package com.wjy.test;

import java.util.Iterator;

import com.wjy.iterable.MyIterable;

public class MainTest {
	public static void main(String args[]){
		String[] arr="hello i am your god.".split(" ");
		MyIterable myIterable=new MyIterable(arr);

		Iterator<String> iterator=myIterable.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		System.out.println("***********************************************");
		for(String str : myIterable){
			System.out.println(str);
		}
	}
}

 

第二个:

package com.wjy.iterable;

import java.util.Iterator;

public class MyIterableNew implements Iterable<String>{

	@Override
	public Iterator<String> iterator() {
		
		// TODO Auto-generated method stub
		return new Iterator<String>() {
			private String[] arr="ni hao wo shi shui ni zhi dao ma?".split(" ");
			private int index=0;
			@Override
			public boolean hasNext() {
				// TODO Auto-generated method stub
				return index<arr.length;
			}

			@Override
			public String next() {
				// TODO Auto-generated method stub
				return arr[index++];
			}

			@Override
			public void remove() {
				// TODO Auto-generated method stub
				throw new UnsupportedOperationException();
			}
		};
	}

}

 测试代码:

package com.wjy.test;

import java.util.Iterator;

import com.wjy.iterable.MyIterableNew;

public class MyIterableNewTest {
	public static void main(String args[]){
		MyIterableNew myIterableNew=new MyIterableNew();
		
		for(String string : myIterableNew){
			System.out.println(string);
		}
		
		
		System.out.println("***********************************");
		
		
		Iterator<String> iterator=myIterableNew.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
	}
}

 可以看出来,第二个例子采用了匿名类了。

分享到:
评论

相关推荐

    Iterable和Iterator的关系

    在Java编程语言中,`Iterable`和`Iterator`是两个非常重要的接口,它们在处理集合数据时起到核心作用。理解这两个接口的关系对于高效地操作Java集合框架至关重要。 首先,我们来了解一下`Iterable`接口。`Iterable`...

    Java源码分析Iterable.pdf

    Iterable接口的定义位于java.lang.Iterable接口中,它只有一个方法,即iterator(),该方法返回一个Iterator对象,该对象用于迭代对象的元素。Iterable接口的定义如下所示: ```java public interface Iterable&lt;T&gt; {...

    详解Java中Iterable与Iterator用法

    Iterator接口中定义了两个主要方法:hasNext()和next(),它们分别用于判断集合中是否有下一个元素和获取下一个元素的值。Iterator通过这两个方法定义了对集合迭代访问的方法,而具体的实现方式依赖于不同的实现类。 ...

    java集合_浅谈Iterable和Iterator的区别

    在Java编程语言中,集合框架是处理对象数组的关键部分,而`Iterable`和`Iterator`则是这个框架中的两个核心概念,它们提供了遍历集合元素的能力。这篇文章将深入探讨`Iterable`和`Iterator`的区别,以及它们在实际...

    设计模式实例

    Java中的Iterable接口和Iterator接口就是迭代器模式的体现。 以上设计模式都是面向对象编程中的重要工具,理解并掌握它们,能够提升代码质量,降低维护成本,增加软件的可扩展性和可复用性。通过阅读压缩包中的Java...

    23种设计模式的Java实现

    Java中,Iterable接口和Iterator接口实现了迭代器模式。 23. **访问者模式**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。Java中,访问者和元素...

    【JDK1.8源码剖析】内部迭代器 Iterable接口

    文章目录Iterable源码分析(一)简介(二...当然,一个类如果没有实现Iterable接口,也可以通过挂载外部迭代器Iterator进行遍历。 此外,内部迭代器还可转换为可分割迭代器Spliterator,以便用于流式操作 注意区别于外

    一个使用iterator和json技术的实例

    在Java编程语言中,`Iterator`接口和`Iterable`接口是处理集合数据的重要工具,而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于数据传输和存储。这个"iterator_jsonDemo"实例结合了这...

    数据结构与算法java进阶(百度T5推荐)

    - 在Java中,迭代器通常通过实现Iterable接口和Iterator接口来实现。 #### 第四章:栈与队列 - **4.1 栈** - 栈是一种后进先出(LIFO)的数据结构,只允许在一端进行插入和删除操作。 - 栈的主要操作有push(入栈)...

    关于方法iterator()找不着的问题~~~~~

    如果你正在使用的类库版本不支持`iterator()`方法,比如你引用了一个旧版本的集合库,而这个版本并未实现`Iterable`接口,那么`iterator()`将不可用。确保你的项目依赖是最新的,并且与你的代码兼容。 2. **类型...

    自己实现java中Iterator(迭代器功能).docx

    #### 解释Iterable接口 除了`Iterator`之外,还有一个相关的接口`Iterable`。这个接口主要用于定义一个可以被迭代的对象,它提供了一个`iterator()`方法,该方法返回一个迭代器对象。 ```java public interface ...

    Iterator详解

    `iterator()`方法是`Iterable`接口的一个方法,由`Collection`接口继承。当你调用一个集合对象的`iterator()`方法时,它会返回一个实现了`Iterator`接口的对象,这个对象可以用来遍历集合中的元素。例如: ```java...

    Java源码分析:深入探讨Iterator模式

    在Java中,集合框架通过实现`Iterable`接口并提供一个`iterator()`方法来支持迭代器模式。下面我们将深入探讨`java.util.AbstractList`类中如何实现迭代器模式。 #### 四、`java.util.AbstractList`中的迭代器实现 ...

    java.util包

    2. Iterator和Iterable接口:Iterator用于遍历集合中的元素,而Iterable接口使得类可以被for-each循环遍历。这两个接口是Java集合框架的重要组成部分,提供了访问和操作集合元素的标准方式。 3. Map接口和其实现类...

    Iterator Pattern(迭代模式)

    在Java中,迭代器模式的实现通常使用`Iterable`接口和`Iterator`接口。`Iterable`接口定义了一个`iterator()`方法,返回一个`Iterator`实例。`Iterator`接口则包含`hasNext()`和`next()`方法。 ```java public ...

    Java容器类接口框架总览1

    Java容器类接口框架是Java集合框架的核心,它提供了一套高效、灵活的数据存储和管理机制。本文将深入探讨Java中的Collection接口及其子...理解并熟练运用这些接口和类,能够帮助开发者编写出更加灵活、可维护的代码。

    示例iterator使用及技巧

    在Java中,所有实现了`Iterable`接口的类(如`Collection`接口的所有实现类)都可以返回一个`Iterator`对象来遍历其内部的元素。 ##### 2. 获取`Iterator`实例 获取`Iterator`实例的方法非常简单,只需调用实现了`...

    Collection集合继承结构图.pdf

    Iterable接口允许对象成为“for-each”循环的目标,它通过Iterator接口实现迭代。迭代器模式允许遍历集合的同时进行元素的增删操作,是Collection集合中实现元素遍历的统一方式。 Collection接口提供了标准集合操作...

    设计模式之迭代器模式(Iterator)

    例如,在Java中,`Iterable`接口和`Iterator`接口就是实现迭代器模式的关键。`Iterable`接口定义了获取迭代器的方法`iterator()`,而`Iterator`接口提供了`hasNext()`和`next()`方法,分别用于检查是否还有下一个...

    Java Iterator迭代器_动力节点Java学院整理

    Iterator接口定义了迭代器的基本方法,包括hasNext()、next()和remove()。hasNext()方法用于判断是否存在下一个对象元素,next()方法用于获取下一个对象元素,remove()方法用于删除当前对象元素。 Iterable接口则...

Global site tag (gtag.js) - Google Analytics