Java8之Iterable接口

Iterable接口是Java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素。

源码展示

// T:迭代器返回的类型
public interface Iterable<T> {

    // 返回一个内部元素为T类型的迭代器
    Iterator<T> iterator();

    // 对Iterable中的元素进行指定的操作
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    // 在Iterable元素上创建一个分割器
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

总结

后两个方法是Java8后新添加的,forEach(Consumer action)是为了方便遍历操作集合内的元素。spliterator()则提供了一个可以并行遍历元素的迭代器,以适应现在cpu多核时代并行遍历的需求。其中我们可以看下default修饰符,这也是Java8后新出现的,我们知道,如果我们给一个接口新添加一个方法,那么所有他的具体子类都必须实现此方法,为了能给接口拓展新功能,而又不必每个子类都要实现此方法,Java8新加了default关键字,被其修饰的方法可以不必由子类实现,并且由dafault修饰的方法在接口中有方法体,这打破了Java之前对接口方法的规范。
进行迭代遍历的时候我们需要注意这种情况,就是在遍历的过程中,如果我们对元素进行添加删除,那么会造成并行修改异常。对于这种情况,我们应当使用迭代器Iterator内部的remove()方法,而不是使用集合list直接删除元素。

自定义集合

import java.util.Iterator;

public class MyCollection<E> implements Iterable<E> {

    @SuppressWarnings("unchecked")
    @Override
    public Iterator iterator() {
        return new MyIterator();
    }

    private class MyIterator implements Iterator<E>{

        @Override
        public boolean hasNext() {
            return false;
        }

        @Override
        public E next() {
            return null;
        }
    }
}

原文地址:https://www.cnblogs.com/feiqiangsheng/p/11184196.html

时间: 2024-08-08 19:30:53

Java8之Iterable接口的相关文章

【转】Java迭代:Iterator和Iterable接口

Java迭代 : Iterator和Iterable接口 从英文意思去理解 Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... Iterator:   在英语中or 结尾是都是表示 ...样的人 or ... 者.如creator就是创作者的意思.这里也是一样:iterator就是迭代者,我们一般叫迭代器,它就是提供迭代机制的对象,具体如何迭代,都是Iterator接口规范的. Iterable 一个集合对象要表明自己支持迭

java8改进的接口

java8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现. 5.6.1 接口的概念 类是一种具体实现类,而接口定义了一种规范,接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可满足实际需要. 接口是从多个类中抽象出来的规范,接口不提供任何实现.接口体现的是规范和实现分离的设计哲学. 5.6.2 java中接口的定义 示例:[修饰符]interface 接口名 extend

Java8新特性——接口的默认方法和类方法

Java8新增了接口的默认方法和类方法: 以前,接口里的方法要求全部是抽象方法,java8以后允许在接口里定义默认方法和类方法: 不同的是: 默认方法可以通过实现接口的类实例化的对象来调用,而类方法只能在本接口中调用或在实现类中实现 下面是使用实例: 1 public interface MyInter { 2 default void df(){ //声明一个接口的默认方法 3 4 System.out.println("i'am default f"); 5 sf(); //调用本

Java之iterator迭代器和iterable接口

java.lang.Iterable java.util.Iterator Iterator是迭代器类,而Iterable是接口. 好多类都实现了Iterable接口,这样对象就可以调用iterator()方法. 一般都是结合着用,比如 HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: 1 Map hashMap =new HashMap(); 2 Iterator iter = hashMap.iterator(); 3 while(iter.ha

13.Java中Comparable接口,Readable接口和Iterable接口

1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass>{ private int x; private int y; public MyClass(int x,int y){ this.x=x; this.y=y; } @Override public int compareTo(MyClass o) { //按照y进行升序排序 return y<o.y

Iterator、Iterable接口的使用及详解

Java集合类库将集合的接口与实现分离.同样的接口,可以有不同的实现. Java集合类的基本接口是Collection接口.而Collection接口必须实现Iterator接口. 以下图表示集合框架的接口,java.lang以及java.util两个包里的.其他部分可以从左向右看,比如Collection的Subinterfaces有List,Set以及Queue等. package java.util; /** * An iterator over a collection. Iterato

为什么数组没有实现Iterable接口,但可以使用foreach语句遍历

在Java中,对于数组为什么能够使用foreach语句一直感觉很困惑. 对于能够使用foreach语句进行遍历的对象,只有两种情况,其中一种是遍历对象必须实现Iterable接口,实现ierator()方法,这是对象使用foreach语句的前提.另外一种情况就是特殊对象数组.那么对于数组可以使用foreach该如何去理解呢? 首先需要说明的是,实现了java.lang.Iterable接口的对象可以用for-each去遍历,但是能用for-each去遍历的不一定实现了该接口,比如数组这个特殊对象

JAVA8新特性——接口定义增强

JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 接口定义增强 在JDK1.8以前,接口是定义的: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 在JDK1.8之前,接口有如下特性: 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错). 接口中

java8中的接口

java8中接口可以有默认方法(用default修饰,可以有多个)和静态方法了. public interface Tran { default public String getName() { return "zhangsan"; } default public String getName1() { return "lisi"; } public static String getName2() throws Exception{ return "