这一章节我们来说一下foreach与Iterator。
1.例子:
package com.ray.ch09;
import java.util.ArrayList;
public class Test {
public static void showItems(Iterable<Integer> iterator) {
for (Integer item : iterator) {
System.out.println(item);
}
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
showItems(list);
}
}
上面的例子是不是很熟悉,但是也不尽相同?
因为上面我们只是沿用了foreach,但是增加了Iterable接口这个东西。
在foreach的实现里面,只要实现了Iterable接口的容器,都可以使用foreach,因此, 尽管foreach一般使用在数组里面,但是在大部分容器里面也是可以使用的。
我们将上一章节的代码修改一下,形成新的代码:
package com.ray.ch09;
import java.util.Iterator;
public class Test {
public static void showItems(Iterator<Person> iterator) {
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.print(person.getId() + " ");
}
}
public static void showItems(Iterable<Person> iterator) {
for (Person person : iterator) {
System.out.println(person.getId());
}
}
public static void main(String[] args) {
PersonList personList = new PersonList();
showItems(personList.iterator());
showItems(personList);
}
}
class Person {
private int id = 0;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class PersonList implements Iterable<Person> {
private Person[] persons = new Person[10];
public PersonList() {
for (int i = 0; i < persons.length; i++) {
Person person = new Person();
person.setId(i);
persons[i] = person;
}
}
public Iterator<Person> iterator() {
return new Iterator<Person>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < persons.length;
}
@Override
public Person next() {
return persons[index++];
}
@Override
public void remove() {// 以后会展开实现
}
};
}
}
代码基本差不多,只不过在遍历到时候不再是使用Iterable,而是只能使用foreach。
注意:上面把数组和实现Iterable接口的类放在一起说,但是如果你当数组实现了Iterable接口,那就有问题了,看下面的代码。
package com.ray.ch09;
import java.util.Arrays;
public class Test {
public static void showItems(Iterable<Integer> iterator) {
for (Integer item : iterator) {
System.out.println(item);
}
}
public static void main(String[] args) {
Integer[] array = new Integer[10];
for (int i = 0; i < 10; i++) {
array[i] = i;
}
// showItems(array);//error
showItems(Arrays.asList(array));
}
}
如果把数字当成参数传过去,抛异常,只有在数组转成list后,才能使用。
当然, 如果我们接受的参数直接就是数组,那么,又会不一样。
package com.ray.ch09;
public class Test {
public static void showItems(Integer[] items) {
for (Integer item : items) {
System.out.println(item);
}
}
public static void main(String[] args) {
Integer[] array = new Integer[10];
for (int i = 0; i < 10; i++) {
array[i] = i;
}
showItems(array);
}
}
总结:这一章节主要讲述了foreach与Iterable之间的关系。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
这个"PhysX-9.13.1220-SystemSoftware"是PhysX的系统软件组件,包含了运行PhysX驱动和支持所需的基础架构。 在安装PhysX系统软件时,遵循的步骤非常重要。首先,你需要下载"PhysX-9.13.1220-SystemSoftware.msi"这...
标题中的“p7zip-9.13-1.el5.rf.x86_64.rpm”和“p7zip-plugins-9.13-1.el5.rf.x86_64.rpm”指的是两个Linux RPM(Red Hat Package Manager)格式的软件包,用于64位系统。这两个软件包是p7zip工具的组成部分,p7zip...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
p7zip-plugins-9.13-1.el5.rf.x86_64.rpm
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
这个版本号9.13.0表明它是Postman的一个特定迭代,可能包含了最新的特性和修复。 1. **Postman的使用场景**: - API开发:Postman可以帮助开发者快速创建、编辑和发送HTTP请求,用于测试和调试API。 - 测试:无论...
资源分类:Python库 所属语言:Python 资源全名:salure_helpers-9.13.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
postman接口调用工具
**BIND 9.13.1 知识点详解** BIND (Berkeley Internet Name Domain) 是最广泛使用的DNS(Domain Name System)服务器软件之一,它由互联网系统基金会(ISC)维护。BIND 9.13.1是该系列的一个特定版本,提供了DNS服务...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
《Brother绣花机Pe-Design 9.13:创新与艺术的融合》 Brother绣花机作为业界知名的绣花设备品牌,其推出的Pe-Design 9.13软件是专为刺绣爱好者和专业设计师量身打造的一款强大工具。这款软件不仅集成了先进的设计...