java集合框架中迭代器的作用_JAVA集合框架:Iterator迭代器

在JAVA util包里,有一个接口叫Iterator叫迭代器,它是用来遍历集合的。

JAVA提供了很多个集合,它们在存储元素时,采用存储的方式不同,我们要取出这些集合中的元素,可以通过一种通用的获取方式来完成。

Collection集合元素的通用获取方式:

先由集合对象创建一个迭代器,

迭代器在取元素之前先判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取,一直将所有元素全部取出。这种取出的方式叫迭代。

集合中把这种迭代的方法,描述在Iterator接口中,接口的方法有:

1. hasNext(); 返回boolean

2. next();取出下一个元素,指针往后偏移一位

3. remove(); 从迭代器指向的Collection中移除迭代器返回的最后一个元素

迭代器Iterator是一个接口, 它的实现类就有Collection,

Collection有一个方法叫iterator()

ArrayList类重写了iterator()方法,并返回Iterator接口的实现类的对象

Collection coll = new ArrayList(); //多态

coll.add("ab");

coll.add("bc");

coll.add("www");

//创建Iterator实现类的对象

Iterator it = coll.iterator();

//进行迭代

while(it.hasNext()){

System.out.println(it.next());

}

Iterator的通用之处在于,不管是哪种类型的集合,都可以通用

Collection coll = new HashSet();

....

Iterator it = coll.iterator();

二、集合存储转型的问题

集合可以存储任意类型的对象

Collection coll = new ArrayList(); 不指定泛型,集合可以混合存放不同的类型数据

coll.add(1);

coll.add("abc");

coll.add(true);

//迭代器获取

Iterator it = coll.iterator(); //迭代器同样不能指定泛型,Iterator>

while(it.hasNext()){

Object obj = it.next(); //此处取出的是Object对象

System.out.println(obj); //因为此处不能确定元素对象到底属于哪一种类型,只能用父类来接收。

}

所以迭代器Iterator也应和Collection一样,加上来限定类型

三、泛型

Collection coll = new ArrayList(); //不加泛型,可以任意数据混存

Collection coll = new ArrayList(); //加泛型,限定集合存储数据的类型

Collection coll = new ArrayList();

coll.add("abc");

coll.add(1);

Iterator it = coll.iterator();

while(it.hasNext()){

String s = (String)it.next();

System.out.println(s.length()); //此处强转会出错,因为Integer 1转string时,会报classCastException

}

所以为了安全问题的考虑,JAVA加入了泛型机制,限定集合中的元素类型。

三、增强for

for(临时变量:集合){

}

Collection coll = new ArrayList();

coll.add("www");

coll.add("baidu");

for(String str : coll){

System.out.println(str.length);

}

四、使用泛型的好处

1. 更加安全,避免数据类型转换时ClassCastException,将错误从运行时期,提前到编译时期

2. 避免了类型强转的麻烦,减少了代码量

3. 带来了增强for的使用

五、泛型的通配符

文件系统中*为通配符, 如*.java表示所有后缀名为java的文件

泛型也有通配符

ArrayList arr = new ArrayList();

HashSet set = new HashSet();

arr.add("123");

arr.add("456");

set.add(789);

set.add(890);

//定义一个方法,可以同时迭代上面两个集合,参数如何定义?既不能单独写ArrayList,也不能单独写HashSet,只能写父类接口Collection,但给Collection加泛型时,到底加ArrayList还是HashSet呢,这时通配符就出现了Collection>

public static void iterator(Collection> coll){

Iterator> it = coll.iterator();

while(it.hasNext()){

it.next(); //这里得到的结果是Object类型

}

}

通配符的好处就是通配所有类型,弊端就是类型已经变得未知了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值