赞
踩
目录
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式
集合和数组
数组虽然也可以存储对象,但长度是固定的,可以存对象,也可以存储基本数据类型,但只能存相同数据类型的数据
集合长度是可变的,只能存对象,可以存不同类型的数据
因为每一个集合类对数据的存储方式都有不同,这个存储方式称之为:数据结构
集合中存的是对象的地址
为什么要有迭代器?
对于各个集合类,我们总是都知道它的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。不同的集合会对应不同的遍历方法,客户端代码无法复用。在实际应用中如何将上面两个集合整合是相当麻烦的。所以才有Iterator,它总是用同一种逻辑来遍历集合。使得客户端自身不需要来维护集合的内部结构,所有的内部状态都由Iterator来维护。客户端不用直接和集合进行打交道,而是控制Iterator向它发送向前向后的指令,就可以遍历集合。
作用:
java中提供了很多种集合,它们在存储元素时,采用的存储方式不同。所以当我们要取出这些集合中的元素时,可以通过一种通用的获取方式来完成。
Collection集合元素的通用获取方式:
在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来;继续再判断,如果还有就再取出来。一直到把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
Iterator接口的常用方法:
修饰语和类型 | 方法 | 描述 |
---|---|---|
boolean | hasNext() | 判断集合中还有没有可以被取出的元素,如果有返回true |
E | next() | 取出集合中的下一个元素 |
集合和迭代器
在我们使用迭代器Iterator的时候,同时对集合元素进行操作(操作同一元素),但是迭代器并不知道集合发生变化,会抛出错误。
解决方案:
1.解决并发引起的错误,在迭代的集合元素的时候,不要进行相关的元素操作,只能用迭代器的方法,此方法中没有元素的增加操作
2.用ListIterator方法,可以对元素增删改查
(在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModifycationException异常,所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator,该接口只能通过List集合的listIterator方法获取)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。