我如何使用java的每个循环与自定义类?
我认为大多数编码人员使用的代码如下所示:
ArrayList<String> myStringList = getStringList(); for(String str : myStringList) { doSomethingWith(str); }
我怎样才能利用我自己的类的每个循环? 有一个我应该实现的接口?
你可以实现Iterable 。
这是一个例子 。 这不是最好的,因为对象是自己的迭代器。 不过,它应该给你一个关于发生了什么的想法。
你必须实现Iterable 接口 ,也就是说,你必须实现这个方法
class MyClass implements Iterable<YourType> { Iterator<YourType> iterator() { return ...;//an iterator over your data } }
for循环的短版本( T
代表我的自定义types):
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"); } } }