关于集合遍历/迭代 | B站Java学习笔记

以下讲解的遍历/迭代方式,是所有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站老师所有。

你可能感兴趣的:(java)