JAVA——Iterable介面
/資料參考於JAVA8 API與jdk1.8.0_51原始碼/
Interface Iterable< T >
Iterable介面中T可以接收各種型別定義,實現Iterable介面允許類作為“for-each loop”迴圈的宣告物件
子介面有:
1. BeanContext
2. BeanContextServices
3. BlockingDeque< E >
4. BlockingQueue< E >
5. Collection< E >
6. Deque< E >
7. DirectoryStream< T >
8. List< E >
9. NavigableSet< E >
10. Path, Queue< E >
11. SecureDirectoryStream< T >
12. Set< E >
13. SortedSet< E >
14. TransferQueue< E >
實現Iterable介面的類有:(太多就不排序了)
AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayDeque, ArrayList, AttributeList, BatchUpdateException, BeanContextServicesSupport, BeanContextSupport, ConcurrentHashMap.KeySetView, ConcurrentLinkedDeque, ConcurrentLinkedQueue, ConcurrentSkipListSet, CopyOnWriteArrayList, CopyOnWriteArraySet, DataTruncation, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue, LinkedHashSet, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, RowSetWarning, SerialException, ServiceLoader, SQLClientInfoException, SQLDataException, SQLException, SQLFeatureNotSupportedException, SQLIntegrityConstraintViolationException, SQLInvalidAuthorizationSpecException, SQLNonTransientConnectionException, SQLNonTransientException, SQLRecoverableException, SQLSyntaxErrorException, SQLTimeoutException, SQLTransactionRollbackException, SQLTransientConnectionException, SQLTransientException, SQLWarning, Stack, SyncFactoryException, SynchronousQueue, SyncProviderException, TreeSet, Vector
具體介面程式碼:
package java.lang;
import java.util.Iterator;
import java.util.Objects;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
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);
}
}
- iterator()方法:返回一個迭代器
- forEach()方法:Consumer< ? super T > action表示可以傳入一個lambda表示式或者一個方法引用,然後為每一個元素執行傳入的動作,直到所有元素都被操作一遍或者丟擲異常(注:forEach方法會丟擲NullPointerException異常)。所有動作順序按照迭代器順序,除非實現另有指定的實現類
- spliterator()方法:預設建立一個前繫結spliterator iterable的迭代器。spliterator繼承了iterable的迭代器的快速失敗的屬性(注:該方法通常應該要重寫,因為返回的預設spliterator實現功能很差,是未分級的,不報告任何spliterator特徵,重寫實現幾乎總是提供更好的實現)
其中forEach() 和spliterator()方法是新增的
(完)