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...
}
分享到:
相关推荐
在Java编程语言中,`Iterator`接口和`Iterable`接口是处理集合数据的重要工具,而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于数据传输和存储。这个"iterator_jsonDemo"实例结合了这...
总结一下,`Iterator`是一个迭代器接口,专注于遍历集合元素,而`Iterable`是一个使类支持`for-each`循环的接口,它通过`Iterator`提供遍历功能。`Iterable`的实现比直接实现`Iterator`更灵活,更适合并发环境,并且...
2. Iterator和Iterable接口:Iterator用于遍历集合中的元素,而Iterable接口使得类可以被for-each循环遍历。这两个接口是Java集合框架的重要组成部分,提供了访问和操作集合元素的标准方式。 3. Map接口和其实现类...
在Java中,迭代器模式是通过接口和实现类来实现的,让我们深入探讨一下这个模式。 首先,我们要理解迭代器模式的核心概念。在软件工程中,迭代器模式允许我们遍历一个集合对象的所有元素,而无需暴露集合的内部结构...
要解决这个问题,`CustomCollection`需要实现`Iterable<T>`接口,并提供一个`iterator()`方法返回一个`Iterator<T>`实例。 ```java public class CustomCollection<T> implements Iterable<T> { // ... public ...
8. **`iterator()`方法**:重写`Iterable`接口的`iterator()`方法,返回`this`,使得`FileIterator`实例可以直接在`for-each`循环中使用。 9. **`main()`方法**:在`main`方法中,创建了一个`FileIterator`实例,...
例如,`ArrayList`、`LinkedList`、`HashSet`等类都实现了`Iterable`接口,可以通过`iterator()`方法获取迭代器。以下是一个简单的示例,展示了如何使用迭代器遍历`ArrayList`: ```java import java.util....
在实现泛型类集合时,我们还可以考虑提供其他接口的支持,如`Iterable<T>`,这将允许我们使用`for-each`循环遍历集合。实现`Iterable<T>`接口需要提供一个`Iterator<T>`实例,该实例能返回链表中的下一个元素并检查...
在`for-each`循环中,它期望一个数组或实现了`Iterable`接口的对象,而不是`Iterator`。由于`Iterator`不是`Iterable`的实例,这段代码无法通过编译,正确答案是C。 4. 最后一段代码是关于字符串条件判断的。在第12...
它实现了`Iterable<T>`和`Iterator<T>`接口,所以可以被用于`for-each`循环中。 2. **成员变量**: - `protected T[] data;`:存储要遍历的数据,类型为T的数组。 - `protected int index = 0;`:当前迭代的位置...
然后,我们通过调用`iterator()`方法获取一个Iterator实例。`hasNext()`方法用于检查是否存在更多元素,`next()`方法则用于获取下一个元素并打印。 ### 2. 使用增强型for循环(foreach)迭代 增强型for循环是Java ...
8. 扩展接口:`Iterable` 和 `Stream`,使集合可被用于 for-each 循环和流式处理。 9. 链表(LinkedList)与数组(ArrayList)的区别:LinkedList 的插入和删除操作更快,而 ArrayList 的随机访问更快。 这个“35-...
任何实现了这个接口的对象都可以被用于for-each循环,大大简化了代码。在"Iterators-master"子文件中,我们能看到如何自定义可迭代类型以满足特定的惰性加载需求。 惰性集合,也称为延迟加载或按需加载集合,是一种...
在“for_each_practice-master”项目中,可能包含了具体的代码实例和练习,帮助学习者深入理解`for...of`循环的使用。通过这些实践,开发者可以提升自己的JavaScript技能,更好地应对实际开发中的迭代需求。
这个链栈类实现了`Iterable<Item>`接口,允许通过`for-each`循环进行迭代,并提供了`toString()`方法便于调试。 链栈类内部定义了一个私有的内部类`Node`,代表链栈中的一个节点,包含数据(Item类型)和指向下一个...
- **类型**:包括JDK动态代理(实现接口)和CGLIB动态代理(子类继承)。 ### 设计模式 - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式**:提供创建一系列相关或相互依赖对象的...
在Python中,迭代器可以通过调用`iter()`函数从可迭代对象获得,或者通过实现`__iter__()`和`__next__()`方法来自定义。 3.3 自定义迭代器类 除了上述自定义类的示例,还可以使用`iterator`抽象基类(ABC)来自定义...
在Java集合框架中,诸如`ArrayList`、`LinkedList`等类都实现了`Iterable`接口,因此可以使用`for-each`循环(增强的for循环)进行迭代: ```java List<String> list = new ArrayList(); list.add("Element1"); ...