Java Iterator和增强for循环 for each详解

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

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

综合实例:

package net.csdn.shf4715;

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较快

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值