自己定义一个迭代器,目的是在进行迭代时直接选出一个元素,指针不会自动跳到下一个元素的位置。
贴上代码:
import java.util.Arrays;
/**
* <pre>
* 任务:
* 描述:自定义实现Iterator迭代器
* 作者:@author huangpeng
* 时间:@create 2018-08-31 上午9:58
* 类名: MyIterator
* </pre>
**/
public class MyIterator implements HPIterable<String>{
private Object[] obj = new Object[1];
private int size;
private int current=0;
public static void main(String[] args) {
MyIterator a = new MyIterator();
a.add("huang");
a.add("peng");
a.add("1");
a.add("2");
a.add("3");
HPIterator iter = a.iterator();
while(iter.hasNext()){
System.out.println(iter.pick());
iter.increment();
}
MyIterator b = new MyIterator();
b.add("66666");
b.add("77777");
b.add("88888");
HPIterator iter1 = b.iterator();
while(iter1.hasNext()){
System.out.println(iter1.pick());
iter1.increment();
}
iter.clear();
while(iter.hasNext()){
System.out.println(iter.pick());
iter.increment();
}
}
// 向数组中添加元素
public void add(String str){
if(size==obj.length){
obj = Arrays.copyOf(obj,obj.length<<1);
}
obj[size++]=str;
// 打印数组现在的长度和元素内容
System.out.println("length==="+obj.length+","+Arrays.toString(obj));
}
// 自定义的迭代器
@Override
public HPIterator<String> iterator() {
class iter implements HPIterator<String>{
@Override
public boolean hasNext() {
if(current<size){
return true;
}
return false;
}
@Override
public String next() {
return obj[current++].toString();
}
// 选出一个元素,并不向前进一步
public String pick() {
return obj[current].toString();
}
// 向前进一步
public void increment(){
current++;
}
// 将迭代的位置移动到头部
public void clear(){
current = 0;
}
}
return new iter();
}
}
// 迭代器接口,做具体的操作
interface HPIterator<E> {
boolean hasNext();
E next();
E pick();
void increment();
void clear();
}
// 表示具有迭代功能的接口,只要有了迭代功能,它内部就必须自己去实现一个迭代器
interface HPIterable<T> {
HPIterator<T> iterator();
}