本帖最后由 大大大卷 于 2015-9-19 23:29 编辑
我是菜鸟,我是这么理解的啊:查了下api发现我说反了,改一下!
java.lang.iterable
这个类是自所有collection子类的超接口,实现这个接口允许使用foreach语句
他的iterable()方法的源代码如下:
- public interface Iterable<T> {
- /**
- * Returns an iterator over a set of elements of type T.
- *
- * @return an Iterator.
- */
- Iterator<T> iterator();
- }
复制代码
这是一个抽象方法,我们可以看看子类是怎么覆盖的,这是ArrayList的iterable方法
- public Iterator<E> iterator() {
- return new Itr();
- }
- /**
- * An optimized version of AbstractList.Itr
- */
- private class Itr implements Iterator<E> {
- int cursor; // index of next element to return
- int lastRet = -1; // index of last element returned; -1 if no such
- int expectedModCount = modCount;
- public boolean hasNext() {
- return cursor != size;
- }
- @SuppressWarnings("unchecked")
- public E next() {
- checkForComodification();
- int i = cursor;
- if (i >= size)
- throw new NoSuchElementException();
- Object[] elementData = ArrayList.this.elementData;
- if (i >= elementData.length)
- throw new ConcurrentModificationException();
- cursor = i + 1;
- return (E) elementData[lastRet = i];
- }
- public void remove() {
- if (lastRet < 0)
- throw new IllegalStateException();
- checkForComodification();
- try {
- ArrayList.this.remove(lastRet);
- cursor = lastRet;
- lastRet = -1;
- expectedModCount = modCount;
- } catch (IndexOutOfBoundsException ex) {
- throw new ConcurrentModificationException();
- }
- }
- final void checkForComodification() {
- if (modCount != expectedModCount)
- throw new ConcurrentModificationException();
- }
- }
复制代码
java.util.iterator
实现这个接口的类可以实现next(),hasNext(),remove(),方法
因为迭代器在每次调用next()方法时,返回的是当前的游标的位置的元素
而如果实现iterable借口,调用foreach语句,每次调用这个方法,都是从集合的第一个元素开始遍历
我感觉自己还是有点蒙,不过还是懂了iterable,interator的原理
与楼主共勉!
以上!
|