可能的重复:
Java中增强的for循环和迭代器有什么优点?
for 循环和 for-each 循环之间有性能差异吗?
下面的代码显示,使用 for 循环和迭代器,我们都可以迭代集合的元素,那么 for 循环和迭代器之间有什么区别,以及为什么在集合的情况下我们应该只使用迭代器
ArrayList<String> list=new ArrayList<String>();
list.add("dipu");
list.add("alok");
list.add("alok");
list.add("jyoti");
ArrayList<Integer> al=new ArrayList<Integer>();
al.add(1);
al.add(2);
String a[]={"a","b"};
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));;
}
for(Integer t:al)
{
System.out.println(t);
}
for (Iterator iter = list.iterator(); iter.hasNext();)
{
System.out.println(iter.next());
}
Iterator it=list.iterator();
while(it.hasNext())
{
String st=it.next().toString();
System.out.println(st);
}
虽然我对Java Iterator不太熟悉,但它看起来与.NET的IEnumerable非常相似。
枚举器/迭代器的优点是:
您不必知道集合的大小,在某些情况下可能需要 N 个步骤才能确定,从而增加执行时间(尽管在技术上它仍然是线性的)。相反,您只需继续移动到下一个元素,直到没有任何元素为止。
由于不必知道集合的基数,因此迭代器可以允许动态生成集合,或者在您开始处理已有的内容时添加添加的元素“流式传输”。例如,您可以从 Iterator 派生和/或重载迭代器 getter 来创建“懒惰”生成有限或无限序列的类,在您请求时而不是在定义集合时计算出可枚举集合中的每个元素是什么。您还可以设置一个缓冲流,在其中处理您收到的记录、数据包等,而另一个线程或进程在您之前工作以排队等待您处理更多内容。
任何可以提供迭代器的集合都可以以完全相同的方式进行遍历,而不必知道它是否可索引,定义大小的方法或成员是什么等等。因此,迭代器实现提供了一个适配器来允许相同的代码处理传递给它的任何集合。
Java 是否具有与 .NET 扩展方法等效的方法(静态方法不是类定义的一部分,但适用于类型的实例,并且可以像实例方法一样进行调用)?如果是这样,您可以定义采用 Iterator 并生成结果的方法,该结果可能是另一个 Iterator。 .NET 的 Linq 库很大程度上基于这些,提供了一个非常强大的集合操作框架,允许将常见操作链接在一起,每个操作都对前一个操作的结果进行操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)