/资料参考于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()方法是新增的
(完)