您的位置:首页 > 编程语言 > Java开发

java学习笔记---迭代器

2013-04-26 19:41 134 查看
(1)Foreach与迭代器

Java SE5引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动,因此如果你创建了任何实现Iterable的类,都可以将它用于foreach语句中。

import java.util.*;

public class AdapterMethodIdiom
{
public static void main(String[] args)
{
ReversibleArrayList<String> ral=new ReversibleArrayList<String>
(Arrays.asList("To be or not to be".split(" ")));
for(String s:ral)
{
System.out.print(s+" ");
}
System.out.println();
for(String s:ral.reversed())
{
System.out.print(s+" ");
}

}

}

class ReversibleArrayList<T> extends ArrayList<T>
{
public ReversibleArrayList(Collection<T> c)
{
super(c);
}
public Iterable<T> reversed()
{
return new Iterable<T>()
{
public Iterator<T> iterator()
{
return new Iterator<T>()
{
int current=size()-1;
public boolean hasNext()
{
return current>-1;
}
public T next()
{
return get(current--);
}
public void remove()
{
throw new UnsupportedOperationException();
}
};
}
};
}
}

输出结果是:

To be or not to be
be to not or be To

如果直接将ral对象置于foreach语句中,将得到默认的前向迭代器,该迭代器是其父类ArrayList本身所拥有的。但是如果在该对象上调用reverse()方法,则置于foreach语句中的是反向的Iterable接口,因此可以反向输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: