這個接口用來代表能夠進行迭代。具體的迭代方式,能夠經過iterator()方法獲取到一個迭代器,在迭代器中會實現如何獲取下一個元素,以及是否迭代結束。java
java8中源碼以下:segmentfault
public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } default Spliterator<T> spliterator() { return Spliterators.spliteratorUnknownSize(iterator(), 0); } }
能夠看到在接口中主要有3個方法ui
從字面意思來看: Iterable 具備迭代能力的; Iterator 迭代器 Iterable的派生類都是具備迭代能力的,具備迭代能力的前提是,須要實現一個Iterator對象來代表如何進行迭代。this
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
Java8中新增的方式,方法前面加了default 代表這是一個默認方法,關於默認方法,能夠看這篇文章.spa
方法的內容很簡單,遍歷每個元素,對每一個元素執行傳入的操做。 注意一點: 若是在執行傳入操做的時候,拋異常了,那麼會中端遍歷的執行。code
public interface Spliterator<T> { boolean tryAdvance(Consumer<? super T> action); default void forEachRemaining(Consumer<? super T> action) { do { } while (tryAdvance(action)); } Spliterator<T> trySplit(); long estimateSize(); default long getExactSizeIfKnown() { return (characteristics() & SIZED) == 0 ? -1L : estimateSize(); } int characteristics(); default boolean hasCharacteristics(int characteristics) { return (characteristics() & characteristics) == characteristics; } default Comparator<? super T> getComparator() { throw new IllegalStateException(); } public static final int ORDERED = 0x00000010; public static final int DISTINCT = 0x00000001; public static final int SORTED = 0x00000004; public static final int SIZED = 0x00000040; public static final int NONNULL = 0x00000100; public static final int IMMUTABLE = 0x00000400; public static final int CONCURRENT = 0x00001000; public static final int SUBSIZED = 0x00004000; }
其中比較重要的是trySplit方法,用來代表如何進行分割。對象