public Iterator<String> iterator(){ return new Iterator<String>() { private int index=0; public boolean hasNext() { return index<words.length;//words代表数组或者集合 } public String next() { return words[index++]; } public void remove() { throw new UnsupportedOperationException(); } }; }
自定义的Collection接口public interface Collection { void add(Object o); int size(); Iterator iterator();}自定义的Iterator接口 public interface Iterator { Object next(); boolean hasNext();} 自定义的一个ArrayList容器 楼主参照这个ArrayList的iterator()方法的实现public class ArrayList implements Collection { Object[] objects = new Object[10]; int index = 0; public void add(Object o) { if(index == objects.length) { Object[] newObjects = new Object[objects.length * 2]; System.arraycopy(objects, 0, newObjects, 0, objects.length); objects = newObjects; } objects[index] = o; index ++; } public int size() { return index; } //返回一个Iterator对象 public Iterator iterator() { return new ArrayListIterator(); } //看这个类的实现 private class ArrayListIterator implements Iterator { private int currentIndex = 0; @Override public boolean hasNext() { if(currentIndex >= index) return false; else return true; } @Override public Object next() { Object o = objects[currentIndex]; currentIndex ++; return o; } }}
迭代器的实现是一种设计模式,在java中只要会用Iterator这个接口就可以了。。
好像用Iterable也可以实现迭代吧??
实现了Iterator接口的类就可以具有迭代器性质(模式)。
public String next() { if(index != words.size) return words[index++]; else throw new Exception("已经是最后一个元素"); }
肤浅点解释,你就把迭代器看成一个指针就行了 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TTT { /** * @param args */ public static void main(String[] args) { List list = new ArrayList(); list.add(111); list.add(222); Iterator iterator = list.iterator();//初始化"指针",并将"指针"指向list的第一个元素. while(iterator.hasNext()){//判断"指针"是否可以指向下一个元素. //如果下一个元素不是最后一个元素,返回true. //如果下一个元素为最后一个元素,返回false;
// TODO Auto-generated method stub
return false;
} public Object next() {
// TODO Auto-generated method stub
return null;
} public void remove() {
// TODO Auto-generated method stub
}
那个 next()方法为什么会保留上一次读取的下标??? 也就是说 上次我获取的是 第一个而 而第二次我就获取的是第二个? 这就是有关于迭代器的原理的一个展示么?
你可以参考java.util.Collection的代码.
噢~ 对 这是接口 对~ 接口可以这么搞的.... 哎 学了C# 又学JAVA 有些东西搞的好混乱啊....
return new Iterator<String>() {
private int index=0;
public boolean hasNext() {
return index<words.length;//words代表数组或者集合
}
public String next() {
return words[index++];
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public interface Iterator { Object next(); boolean hasNext();}
自定义的一个ArrayList容器
楼主参照这个ArrayList的iterator()方法的实现public class ArrayList implements Collection { Object[] objects = new Object[10]; int index = 0; public void add(Object o) { if(index == objects.length) { Object[] newObjects = new Object[objects.length * 2]; System.arraycopy(objects, 0, newObjects, 0, objects.length); objects = newObjects; } objects[index] = o; index ++; } public int size() { return index; }
//返回一个Iterator对象
public Iterator iterator() { return new ArrayListIterator(); }
//看这个类的实现
private class ArrayListIterator implements Iterator { private int currentIndex = 0; @Override public boolean hasNext() { if(currentIndex >= index) return false; else return true; } @Override public Object next() { Object o = objects[currentIndex]; currentIndex ++; return o; } }}
if(index != words.size)
return words[index++];
else
throw new Exception("已经是最后一个元素");
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TTT { /**
* @param args
*/
public static void main(String[] args) {
List list = new ArrayList();
list.add(111);
list.add(222);
Iterator iterator = list.iterator();//初始化"指针",并将"指针"指向list的第一个元素.
while(iterator.hasNext()){//判断"指针"是否可以指向下一个元素.
//如果下一个元素不是最后一个元素,返回true.
//如果下一个元素为最后一个元素,返回false;
System.out.println(iterator.next());//拿出当前元素,并将"指针"指向下一个元素
}
/*
*当然这种解释方法是错误的,因为Java里根本没有"指针".
*但是这么解释比较形象,而且实际操作也是这样的.
*/
}}
//如果有下一个元素,返回true.循环继续
//如果没有下一个元素,返回false,退出循环