我认为大多数程序员都使用如下代码:
ArrayList<String> myStringList = getStringList();
for(String str : myStringList)
{
doSomethingWith(str);
}
如何利用我自己的类的每个循环?我应该实现一个接口吗?
答案 0 :(得分:51)
答案 1 :(得分:10)
for循环的简短版本(T
代表我的自定义类型):
for (T var : coll) {
//body of the loop
}
被翻译成:
for (Iterator<T> iter = coll.iterator(); iter.hasNext(); ) {
T var = iter.next();
//body of the loop
}
我的收藏的迭代器可能如下所示:
class MyCollection<T> implements Iterable<T> {
public int size() { /*... */ }
public T get(int i) { /*... */ }
public Iterator<T> iterator() {
return new MyIterator();
}
class MyIterator implements Iterator<T> {
private int index = 0;
public boolean hasNext() {
return index < size();
}
public type next() {
return get(index++);
}
public void remove() {
throw new UnsupportedOperationException("not supported yet");
}
}
}
答案 2 :(得分:7)
你必须实现Iterable interface,也就是说,你必须实现方法
class MyClass implements Iterable<YourType>
{
Iterator<YourType> iterator()
{
return ...;//an iterator over your data
}
}