`
ybhuxiao
  • 浏览: 193250 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现for each,通过iterable接口和iterator(实例)

    博客分类:
  • java
阅读更多
    java1.5提供了for each的循环方式,实现iterable接口就能让自己的类也能这么来循环,写一个例子。

MainTest
package org.hx.itr;

import java.util.Iterator;
import java.util.UUID;

public class MainTest {
	

	public static void main(String[] args) {
		Dept dept = randomDept(3);
		for (Staff staff : dept) {
			System.out.println(staff);
		}
		
		System.out.println();
		
		for (Iterator<Staff> iterator = dept.iterator(); iterator.hasNext();) {
			Staff staff = iterator.next();
			System.out.println(staff); 
		}
	}
	
	/**
	 * 随机产生一些数据用作测试
	 * @param staffCount
	 * @return
	 */
	private static Dept randomDept(int staffCount){
		Dept dept = new Dept();
		for (int i = 0; i < staffCount; i++) {
			Staff staff = new Staff();
			staff.setName(UUID.randomUUID().toString().substring(0,5));
			staff.setGender((int)Math.round(Math.random()*2));
			staff.setAge((int)Math.round(Math.random()*100)+1);
			dept.addStaff(staff);
		}
		return dept;
	}
}



Dept类:实现了iterable接口
package org.hx.itr;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Dept implements Iterable<Staff> {

	List<Staff> staffList = new ArrayList<Staff>();

	public void addStaff(Staff staff) {
		this.staffList.add(staff);
	}

	public List<Staff> getStaffList() {
		return staffList;
	}

	public Iterator<Staff> iterator() {
		Itr itr = new Itr();
		itr.setDept(this);
		return itr;
	}
}

class Itr implements Iterator<Staff> {

	private int cursor = -1;
	private Dept dept;

	public void setDept(Dept dept) {
		this.dept = dept;
	}

	public boolean hasNext() {
		return dept.getStaffList() != null && dept.getStaffList().size() > cursor + 1;
	}

	public Staff next() {
		return dept.getStaffList().get(++cursor);
	}

	public void remove() {
		dept.getStaffList().remove(cursor);
	}

}




Staff类
package org.hx.itr;

public class Staff {

	private String name;
	private int gender;
	private int age;

	@Override
	public String toString() {
		return "name = " + name + ", gender = " + gender + ", age = " + age;
	}

	// ...getter and setters...
}
分享到:
评论

相关推荐

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

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

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

    总结一下,`Iterator`是一个迭代器接口,专注于遍历集合元素,而`Iterable`是一个使类支持`for-each`循环的接口,它通过`Iterator`提供遍历功能。`Iterable`的实现比直接实现`Iterator`更灵活,更适合并发环境,并且...

    java.util包

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

    迭代器模式.rar之java设计模式

    在Java中,迭代器模式是通过接口和实现类来实现的,让我们深入探讨一下这个模式。 首先,我们要理解迭代器模式的核心概念。在软件工程中,迭代器模式允许我们遍历一个集合对象的所有元素,而无需暴露集合的内部结构...

    Java for-each循环使用难题2例(高级使用方法)

    要解决这个问题,`CustomCollection`需要实现`Iterable&lt;T&gt;`接口,并提供一个`iterator()`方法返回一个`Iterator&lt;T&gt;`实例。 ```java public class CustomCollection&lt;T&gt; implements Iterable&lt;T&gt; { // ... public ...

    java使用iterator遍历指定目录示例分享

    8. **`iterator()`方法**:重写`Iterable`接口的`iterator()`方法,返回`this`,使得`FileIterator`实例可以直接在`for-each`循环中使用。 9. **`main()`方法**:在`main`方法中,创建了一个`FileIterator`实例,...

    设计模式之迭代器模式

    例如,`ArrayList`、`LinkedList`、`HashSet`等类都实现了`Iterable`接口,可以通过`iterator()`方法获取迭代器。以下是一个简单的示例,展示了如何使用迭代器遍历`ArrayList`: ```java import java.util....

    实现泛型类集合 实现双向链表

    在实现泛型类集合时,我们还可以考虑提供其他接口的支持,如`Iterable&lt;T&gt;`,这将允许我们使用`for-each`循环遍历集合。实现`Iterable&lt;T&gt;`接口需要提供一个`Iterator&lt;T&gt;`实例,该实例能返回链表中的下一个元素并检查...

    OCJP认证-3期(PX017) Java语言基础-流程控制.docx

    在`for-each`循环中,它期望一个数组或实现了`Iterable`接口的对象,而不是`Iterator`。由于`Iterator`不是`Iterable`的实例,这段代码无法通过编译,正确答案是C。 4. 最后一段代码是关于字符串条件判断的。在第12...

    Java实现的自定义迭代器功能示例

    它实现了`Iterable&lt;T&gt;`和`Iterator&lt;T&gt;`接口,所以可以被用于`for-each`循环中。 2. **成员变量**: - `protected T[] data;`:存储要遍历的数据,类型为T的数组。 - `protected int index = 0;`:当前迭代的位置...

    java 中ArrayList迭代的两种实现方法

    然后,我们通过调用`iterator()`方法获取一个Iterator实例。`hasNext()`方法用于检查是否存在更多元素,`next()`方法则用于获取下一个元素并打印。 ### 2. 使用增强型for循环(foreach)迭代 增强型for循环是Java ...

    JAVA类集应用

    8. 扩展接口:`Iterable` 和 `Stream`,使集合可被用于 for-each 循环和流式处理。 9. 链表(LinkedList)与数组(ArrayList)的区别:LinkedList 的插入和删除操作更快,而 ArrayList 的随机访问更快。 这个“35-...

    tracee-api-0.3.0.zip

    任何实现了这个接口的对象都可以被用于for-each循环,大大简化了代码。在"Iterators-master"子文件中,我们能看到如何自定义可迭代类型以满足特定的惰性加载需求。 惰性集合,也称为延迟加载或按需加载集合,是一种...

    for_each_practice:练习回购

    在“for_each_practice-master”项目中,可能包含了具体的代码实例和练习,帮助学习者深入理解`for...of`循环的使用。通过这些实践,开发者可以提升自己的JavaScript技能,更好地应对实际开发中的迭代需求。

    实验报告-实验82

    这个链栈类实现了`Iterable&lt;Item&gt;`接口,允许通过`for-each`循环进行迭代,并提供了`toString()`方法便于调试。 链栈类内部定义了一个私有的内部类`Node`,代表链栈中的一个节点,包含数据(Item类型)和指向下一个...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **类型**:包括JDK动态代理(实现接口)和CGLIB动态代理(子类继承)。 ### 设计模式 - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式**:提供创建一系列相关或相互依赖对象的...

    Python可迭代对象、迭代器详解

    在Python中,迭代器可以通过调用`iter()`函数从可迭代对象获得,或者通过实现`__iter__()`和`__next__()`方法来自定义。 3.3 自定义迭代器类 除了上述自定义类的示例,还可以使用`iterator`抽象基类(ABC)来自定义...

    functionalDesignPattern

    在Java集合框架中,诸如`ArrayList`、`LinkedList`等类都实现了`Iterable`接口,因此可以使用`for-each`循环(增强的for循环)进行迭代: ```java List&lt;String&gt; list = new ArrayList(); list.add("Element1"); ...

Global site tag (gtag.js) - Google Analytics