java迭代器有一段代码没看懂
importjava.util.*;publicclassIterableClassimplementsIterable<String>{String[]pets={"C...
import java.util.*;
public class IterableClass implements Iterable<String>{
String[] pets={"Cat","Cymric","Dog","Manx","Mutt","Pug","Rabit","Rat"};
public Iterator<String> iterator(){
return new Iterator<String>(){
private int index=0;
public boolean hasNext(){
return index<pets.length;
}
public String next(){
return pets[index++];
}
public void remove(){
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args){
for(String p:new IterableClass()){
System.out.println(p+" ");
}
}
}
上面的代码都能看懂,然后就这一段,这是怎么做到输出的。。。不能理解QAQ
for(String p:new IterableClass()){
System.out.println(p+" ");
}
在线等啊啊啊啊啊啊啊啊 展开
public class IterableClass implements Iterable<String>{
String[] pets={"Cat","Cymric","Dog","Manx","Mutt","Pug","Rabit","Rat"};
public Iterator<String> iterator(){
return new Iterator<String>(){
private int index=0;
public boolean hasNext(){
return index<pets.length;
}
public String next(){
return pets[index++];
}
public void remove(){
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args){
for(String p:new IterableClass()){
System.out.println(p+" ");
}
}
}
上面的代码都能看懂,然后就这一段,这是怎么做到输出的。。。不能理解QAQ
for(String p:new IterableClass()){
System.out.println(p+" ");
}
在线等啊啊啊啊啊啊啊啊 展开
2个回答
展开全部
import java.util.*; //导包
public class IterableClass implements Iterable<String>{ //创建一个类,实现接口
String[] pets={"Cat","Cymric","Dog","Manx","Mutt","Pug","Rabit","Rat"};//声明字符串数组
public Iterator<String> iterator(){//iterator方法,空参,返回值类型是Iterator<String>
return new Iterator<String>(){//返回一个匿名内部类对象,即Iterator<String>接口的子类匿名对象
private int index=0;
public boolean hasNext(){ //hasNext方法,空参,返回值是boolean类型
return index<pets.length; //返回布尔值,由index和字符串数组pets的长度比较结果来判断
}
public String next(){// 重写next方法,空参,返回值是String类型
return pets[index++];//返回一个String数组pets的元素,索引是index++(返回自增前的值,返回后,自增1)
}
public void remove(){// 重写remove方法,空参,没有返回值
throw new UnsupportedOperationException();//抛出一个异常对象
}
};
}
public static void main(String[] args){//main方法,程序执行的入口
for(String p:new IterableClass()){//增强for遍历,遍历IterableClass类的对象(数组),底层是用迭代器遍历,调用的是重写后的hasNext和next方法
System.out.println(p+" ");//换行打印数组的元素
}
}
}
=============
for(String p:new IterableClass()){
System.out.println(p+" ");
}
相当于:
Iterator<String> itr=new IterableClass().iterator();
while(itr.hasNext()){
String p = itr.next();
System.out.println(p+" ");
}
public class IterableClass implements Iterable<String>{ //创建一个类,实现接口
String[] pets={"Cat","Cymric","Dog","Manx","Mutt","Pug","Rabit","Rat"};//声明字符串数组
public Iterator<String> iterator(){//iterator方法,空参,返回值类型是Iterator<String>
return new Iterator<String>(){//返回一个匿名内部类对象,即Iterator<String>接口的子类匿名对象
private int index=0;
public boolean hasNext(){ //hasNext方法,空参,返回值是boolean类型
return index<pets.length; //返回布尔值,由index和字符串数组pets的长度比较结果来判断
}
public String next(){// 重写next方法,空参,返回值是String类型
return pets[index++];//返回一个String数组pets的元素,索引是index++(返回自增前的值,返回后,自增1)
}
public void remove(){// 重写remove方法,空参,没有返回值
throw new UnsupportedOperationException();//抛出一个异常对象
}
};
}
public static void main(String[] args){//main方法,程序执行的入口
for(String p:new IterableClass()){//增强for遍历,遍历IterableClass类的对象(数组),底层是用迭代器遍历,调用的是重写后的hasNext和next方法
System.out.println(p+" ");//换行打印数组的元素
}
}
}
=============
for(String p:new IterableClass()){
System.out.println(p+" ");
}
相当于:
Iterator<String> itr=new IterableClass().iterator();
while(itr.hasNext()){
String p = itr.next();
System.out.println(p+" ");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里使用了foreach语法。相信你也了解foreach,我不做解释。你不了解的是它怎么可以用foreach来实现迭代,是吧?
关键的地方在于,这个类IterableClass实现了Iterable接口。查看JDK文档,关于Iterable接口,里面有一条说明:实现这个接口允许对象成为 "foreach" 语句的目标。
也就是说,当这个类的对象在foreach语句中迭代时,自动返回一个迭代器,并自动用这个迭代器的next()方法来返回一个对象。
关键的地方在于,这个类IterableClass实现了Iterable接口。查看JDK文档,关于Iterable接口,里面有一条说明:实现这个接口允许对象成为 "foreach" 语句的目标。
也就是说,当这个类的对象在foreach语句中迭代时,自动返回一个迭代器,并自动用这个迭代器的next()方法来返回一个对象。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询