我是靠谱客的博主 多情翅膀,最近开发中收集的这篇文章主要介绍Java基础复习笔记--Iterator和增强for的比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Iterator是Java中的一个迭代器接口(Interface),用来提供标准的Java迭代器
Iterator支持泛型因为集合(Collection)类可以装入的类型是不确定的,从集合中取出的都是Object类型,加入泛型,就是告诉编译器确定要装入的对象类型,取值时就无需强制转换了。

for each 是 Java 5 中新增的一个循环结构,本质上是一个Iterator,特点是可以用来遍历集合元素而不用考虑集合下标。

综合实例:

package net.csdn.fortest;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorDemo {
/**

  • Iterator和for each的综合例子
    @param args
    /
    public static void main(String[] args) {
    //创建一个list并设置泛型为Emp类型
    List<Emp> list = new ArrayList<Emp>();
    //添加Emp实例到list
    list.add(new Emp(“one”));
    list.add(new Emp("
    "));
    list.add(new Emp(“two”));
    list.add(new Emp("
    "));
    list.add(new Emp(“three”));
    list.add(new Emp(""));
    //使用list的iterator()方法返回一个迭代器
    Iterator<Emp> it = list.iterator();
    //hasNext() Iterator中的一个方法,判断是否有下一个元素
    while(it.hasNext()) {
    //如果Emp对象中的name的值是则删除该元素
    if("*".equals(it.next().getName())){
    it.remove();
    }
    }
    System.out.println(list);
    //增强for循环用于遍历集合,但不适合对集合进行删除操作
    //但是可以进行修改
    for(Emp e : list) {
    list.set(1,new Emp(“1”));
    System.out.print(e.getName()+" ");
    }
    }
    }
    /**
  • Emp类
    * @author haydn

*/
class Emp {
private String name;
public Emp(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return name;
}
}

运行结果:
[one, two, three]
one 1 three

Iterator和 for each的区别:
1.for each 不能删除集合元素
2.Iterator 只能使用自身的remove()方法来删除元素,不能用集合的删除操作
3.ArrayList里,for循环较快,LinkedList里,使用iterator较快.

为什么ArrayList的遍历中for比Iterator快,而LinkedList中却是Iterator远快于for?这得从ArrayList和LinkedList两者的数据结构说起了:

ArrayList 是基于索引(index)的数组,索引在数组中搜索和读取数据的时间复杂度是O(1),但是要增加和删除数据却是开销很大的,因为这需要重排数组中的所有数据。

LinkedList 的底层实现则是一个双向循环带头节点的链表,因此LinkedList中插入或删除的时间复杂度仅为O(1),但是获取数据的时间复杂度却是O(n)。

明白了两种List的区别之后,就知道,ArrayList用for循环随机读取的速度是很快的,因为ArrayList的下标是明确的,读取一个数据的时间复杂度仅为O(1)。但LinkedList若是用for来遍历效率很低,读取一个数据的时间复杂度就达到了为O(n)。而用Iterator的next()则是顺着链表节点顺序读取数据的效率就很高了。

总结:这两种遍历方式各有特色,优势各有不同,在处理不同情景下的数据,利用好它们的长处能使程序运行的更好。

参考:https://blog.csdn.net/shf4715/article/details/47029049 https://blog.csdn.net/OrPis/article/details/80839303

最后

以上就是多情翅膀为你收集整理的Java基础复习笔记--Iterator和增强for的比较的全部内容,希望文章能够帮你解决Java基础复习笔记--Iterator和增强for的比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部