网站首页 > 精选教程 正文
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接口 的对象,获取迭代器是在底层进行的,所以看不到这一点。当将Iterable与for-each循环一起使用时,Java编译器负责为此生成代码。
Iterable的实现
Iterable接口(java.lang.Iterable)是java集合根接口中的一个,因此java中有好几个类实现了Iterable接口,因此,可以迭代这些类的内部元素。同样也有一些接口继承了Iterable接口,所以实现了继承Iterable 的接口的类,同时也实现了Iterable 接口,这些类的元素同样可以迭代。Collection 接口继承了Iterable接口,所以所有Collection 的子类都实现了Iterable接口。比如List和Set继承了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
猜你喜欢
- 2024-11-30 java基础:ArrayList集合
- 2024-11-30 java高级特性之集合篇
- 2024-11-30 Java中的Map集合、散列表、红黑树介绍
- 2024-11-30 最全的java集合总结知识脑图
- 2024-11-30 理解java的集合框架看看这几张图就够了
- 2024-11-30 Java集合-Collection
- 2024-11-30 15集动画演示Java集合视频总结
- 2024-11-30 Java集合核心内容之数组和链表,大厂越来越注重基础了,建议收藏
- 2024-11-30 Java面试篇基础部分-Java中的集合类
- 2024-11-30 Java集合Set 集合、List和Collections类
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)