Java集合-Iterable

Iterable接口表示一组对象,这些对象是Iterable的,这意味着可以迭代,这意味着实现Iterable接口,则可以迭代其元素,可以通过以下方式迭代Iterable对象,使用for-each循环,Iterable获取Iterator或者通过Iterable forEach()方法,下面会一一讲解。

for-each循环等待的Iterable

第一种方法就是通过for-each 循环迭代,下面例子是如何通过for-each 循环迭代List。因为List继承了Collection 接口,Collection接口继承了Iterable  ,所以List对象可以使用for-each循环:

List<String> list = new ArrayList<> ();

list.add("one");
list.add("two");
list.add("three");

for( String element : list ){
    System.out.println( element.toString() );
}

 

上面例子初始化了List对象,然后加了三个元素,然后用for-each循环迭代List,并且调用toString()方法打印每个元素。

通过Iterator迭代Iterable

第二个众方法是通过Iterator 迭代,Iterator 上一篇我们以及讲过,下面看代码:

List<String> list = new ArrayList<>();

list.add("one");
list.add("two");
list.add("three");

Iterator<String> iterator = list.iterator();

while(iterator.hasNext()) {
    String element = iterator.next();
    System.out.println( element );
}

 

调用Iterable forEach()方法迭代

通过调用Iterable forEach()方法, forEach()方法的参数是lambda表达式 ,下面是代码:

List<String> list = new ArrayList<>();

list.add("one");
list.add("two");
list.add("three");

list.forEach( (element) -> {
    System.out.println( element );
});

 

Iterable接口定义

Iterable接口中只有三个方法需要实现,另外两个以及有默认的实现,下面是Iterable接口的定义:

public interface Iterable<T> {

  Iterator<T>    iterator();

  Spliterator<T> spliterator();

  void           forEach(Consumer<? super T> action);

}

 

必须实现的方法是iterator(),这个方法返回一个Iterator,可以用来迭代实现了Iterable接口 的对象,获取迭代器是在底层进行的,所以看不到这一点。当将Iterablefor-each循环一起使用时,Java编译器负责为此生成代码。

Iterable的实现

Iterable接口(java.lang.Iterable)java集合根接口中的一个,因此java中有好几个类实现了Iterable接口,因此,可以迭代这些类的内部元素。同样也有一些接口继承了Iterable接口,所以实现了继承Iterable 的接口的类,同时也实现了Iterable 接口,这些类的元素同样可以迭代。Collection 接口继承了Iterable接口,所以所有Collection 的子类都实现了Iterable接口。比如ListSet继承了Collection接口,所以他们也继承了Iterable接口。

实现Iterable接口

下面例子简单的实现了Iterable接口:

public class Persons implements Iterable {
    private List<Person> persons = new ArrayList<Person>();    
    
    public Iterator<Person> iterator() {
        return this.persons.iterator();
    }
}

 

Persons 实例对象可以使用for-each循环:

Persons persons = ... //obtain Persons instance with Person objects inside.

for(Person person : persons) {
    // do something with person object.
}

 

获取Spliterator

可以通过 Iterable spliterator()方法获取Spliterator,这里不详细讲解Spliterator,只讲解一下简单的应用:

List<String> list = new ArrayList<>();

list.add("one");
list.add("two");
list.add("three");

Spliterator<String> spliterator = list.spliterator();

 

参考: http://tutorials.jenkov.com/java/for.html#the-java-for-each-loop

http://tutorials.jenkov.com/java-collections/iterable.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值