以下讲解的遍历/迭代方式,是所有Collection通用的一种方式,在Map集合中不能用,在所有的Collection以及子类中使用。
创建集合对象
public class CollectionTest02 {
public static void main(String[] args) {
Collection c = new ArrayList(); 后面的集合无所谓,主要是看前面的Collection接口怎么遍历/迭代
c.add("abc");
c.add("def");
c.add(100);
c.add(new Object());
对集合Collection进行遍历/迭代
第一步:获取集合对象的迭代器对象Iterator
Iterator it = c.iterator();
第二步:通过以上获取的迭代器对象开始迭代/遍历集合
boolean hasNext = it.hasNext();
这个方法返回true,表示还有元素可以迭代,这个方法返回false表示没有更多的元素可以迭代了
Object obj = it.next();
这个方法让迭代器前进以为,并且将指向的元素返回(拿到)
注意:集合结构只要发生改变,迭代器必须重新获取
刚开始获取的迭代器,指向的是集合中没有元素状态下的迭代器
当集合结构发生了改变,迭代器没有重新获取时,调用next()方法时:
java.util.ConcurrentModificationException
加完元素之后,迭代器要重新获取
出异常根本原因:集合中元素删除了,但是没有更新迭代器(迭代器不知道集合变化了)
重点:在迭代集合元素的过程中,不能调用集合对象的remove方法,删除元素: c.remove(o); 迭代过程中不能这样。
获取的迭代器对象,迭代器用来遍历集合,此时相当于对当前集合的状态拍了一个快照。迭代器迭代的时候会参照这个快照进行迭代
在迭代器里面删除的话,会对应着把集合里的元素也删掉
因为通过集合去删除的话,并没有通知迭代器。(导致迭代器的快照和原集合状态不同)
仅供学习使用,内容版权归B站老师所有。