Home > Java > javaTutorial > body text

Code example of how to implement the Iterator pattern in Java

黄舟
Release: 2017-03-11 11:13:53
Original
2054 people have browsed it

Class diagram


##

/**
 * 自定义集合接口, 类似java.util.Collection
 * 用于数据存储
 * @author stone
 *
 */
public interface ICollection<T> {
	
	IIterator<T> iterator(); //返回迭代器
	void add(T t);
	T get(int index);
}
Copy after login
/**
 * 自定义迭代器接口 类似于java.util.Iterator
 * 用于遍历集合类ICollection的数据
 * @author stone
 *
 */
public interface IIterator<T> {
	boolean hasNext();
	boolean hasPrevious();
	T next();
	T previous();
}
Copy after login
/**
 * 集合类, 依赖于MyIterator
 * @author stone
 */
public class MyCollection<T> implements ICollection<T> {

	private T[] arys;
	private int index = -1;
	private int capacity = 5;
	
	public MyCollection() {
		this.arys = (T[]) new Object[capacity];
	}
	
	@Override
	public IIterator<T> iterator() {
		return new MyIterator<T>(this);
	}
	
	@Override
	public void add(T t) {
		index++;
		if (index == capacity) {
			capacity *= 2;
			this.arys = Arrays.copyOf(arys, capacity);
			
		}
		this.arys[index] = t;
	}
	
	@Override
	public T get(int index) {
		return this.arys[index];
	}
	
}
Copy after login
/*
 * 迭代器(Iterator)模式 又叫做游标(Cursor)模式
 * 提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
 * Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据
 * 
 * 若有新的存储结构,可new 一个ICollection, 对应的 new 一个IIterator来实现它的遍历
 */
@SuppressWarnings({"rawtypes", "unchecked"})
public class Test {
	public static void main(String[] args) {
		ICollection<Integer> collection = new MyCollection<Integer>();
		add(collection, 3, 5, 8, 12, 3, 3, 5);
		for (IIterator<Integer> iterator = collection.iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
		}
		
		System.out.println("-------------");
		
		ICollection collection2 = new MyCollection();
		add(collection2, "a", "b", "c", 3, 8, 12, 3, 5);
		for (IIterator iterator = collection2.iterator(); iterator.hasNext();) {
			System.out.println(iterator.next());
		}
		
	}
	
	static <T> void  add(ICollection<T> c, T ...a) {
		for (T i : a) {
			c.add(i);
		}
	}
}
Copy after login

Print

3
5
8
12
3
3
5
-------------
a
b
c
3
8
12
3
5
Copy after login

The above is the detailed content of Code example of how to implement the Iterator pattern in Java. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!