关于for丶foreach丶iterator 迭代器

关于for丶foreach丶iterator 迭代器

1丶前言:我们在网上或者在讨论的时候往往会有这么一种说法:foreach 也是迭代器的一类,底层实现的是迭代器。但是这种说法并不严谨,也可以说这种说法对于我们正常的理解来说并不是能够完全理解。

2丶首先我来说出结论:for 丶 foreach 丶迭代器 这三个遍历方法中 不应该将他们三种遍历方法归在一起 而是将其分成三类)——不要将foreach 归为迭代器的一种遍历
(我们一步一步来,首先来简单介绍一下这是那种方法的区别)

3丶区别:
1)形式区别:
对于for循环,我们采用:

for(int i=0;i<arr.size();i++){…}
对于foreach:

for(int i:arr){…}
(在这里用int 类型举个例子)
对于迭代器的形式:

Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); …}

2)条件差别
for需要知道数组或者集合的大小,而且需要时有序的,不然无法遍历;

foreach和iterator不需要知道数组或者集合的大小,他们都是得到集合内的每一个元素然后进行处理;

3)多态差别
for和foreach都需要知道自己的集合类型,甚至要知道自己集合内的元素类型,不能实现多态。(
public static void main(String[] args) {
int[] ints = new int[]{1, 2, 3, 4};
int[] var2 = ints;
int var3 = ints.length;

for(int var4 = 0; var4 < var3; ++var4) {
int i = var2[var4];
System.out.println(i);
}

Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(789);
coll.add(new Person(1001, “Tom”));
Iterator var7 = coll.iterator();

while(var7.hasNext()) {
Object object = var7.next();
System.out.println(object);
}

}
这差不多是增强for的底层源码 我们可以清楚的看到 当我们遍历数组的时候他会用for循环俩遍历,放我们遍历结合的时候他会用迭代器来使用(你可能感到这与上面我所得出的结论相违背,下面的讲解我会说明)

Iterator是一个接口类型,它不关心集合的累心和集合内的元素类型,因为它是通过hasnext和next来进行下一个元素的判断和获取,这一切都是在集合类型定义的时候就完成的事情。迭代器统一了对容器的访问模式,这也是对接口解耦的最好表现。(lIterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。)

4)用法差别
for一般可以用于简单的顺序集合,并且可以预测集合的大小(一定要有序,因为i这个索引,所以遍历是一定要有序);

foreach可以遍历任何集合或者数组,但是使用者需要知道遍历元素的类型

iterator是最强大的,它可以随之修改元素内部的元素。可以在遍历的时刻用remove()
而且iterator不需要知道元素类型和元素大小,通过hasnext()判断是否遍历完所有元素。

而且在对范型的集合进行遍历的时候,iterator是唯一的选择,就是因为不需要知道元素类型便可以遍历。

4丶代码分析:
我们来看一下代码:
import java.util.*;

public class TreeSetTest {
public static void main(String[] args) {
List list=new ArrayList();

    list.add("1");
    list.add("2");
    /*for(String temp : list){
        if("1".equals(temp))
            list.remove(
  • 29
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 35
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值