zl程序教程

您现在的位置是:首页 >  Java

当前栏目

迭代器和增强for的使用

2023-02-18 16:35:56 时间

迭代器和增强for

迭代器是什么?

  • 迭代器是帮助遍历集合的类
  • 它是一个接口

迭代器演示

迭代器的演示

迭代器的创建

集合.iterator(); 返回一个Iterator<引用类型>

遍历时删除修改,会引发并发修改异常

异常:ConcurrentModificationException

产生原因:

  • 在迭代器遍历集合的时候,如果使用集合对象增删集合元素,就会出现并发修改异常

解决异常

  • 如果要删除元素,可以使用迭代器的remove()方法
  • 如果要添加元素,迭代器里面没有提供添加的方法。如果要用需要使用另一个迭代器ListItr

//删除演示:

//创建Arraylist 集合
ArrayList<String> list = new ArrayList<>();
//添加集合
list.add("CSDN");
list.add("常家壮");
list.add("博客");

//迭代器创建
Iterator<String> iterator = list.iterator();
//循环
//快捷键:itit
while (it.hasNext()) {
    String s = it.next();
    //判断之后删除
    if(s.equals("常家壮")){
        it.remove();  //删除当前元素
    }
}

创建迭代器如下演示:

//创建Arraylist 集合
ArrayList<String> list = new ArrayList<>();
//添加集合
list.add("CSDN");
list.add("常家壮");
list.add("博客");

//迭代器创建
Iterator<String> iterator = list.iterator();

方法

说明

E next()

获取集合中的元素

boolean hasNext()

判断集合中有没有下一个元素

void remove()

删除当前元素

遍历集合

public class Texitit {
    public static void main(String[] args) {
        //创建Arraylist 集合
        ArrayList<String> list = new ArrayList<>();
        //添加集合
        list.add("CSDN");
        list.add("常家壮");
        list.add("博客");

        //迭代器遍历集合
        Iterator<String> iterator = list.iterator();
        //用迭代器遍历数组 如果用idea 快捷键:itit
        while (iterator.hasNext()) {
            String next =  iterator.next();
            System.out.println(next);//输出遍历结果
        }

    }
}

迭代器底层源码

public boolean hasNext() {
    return cursor != size;
}

public E next() {
	checkForComodification();
	int i = cursor;
	if (i >= size){
		throw new NoSuchElementException();
    }
	Object[] elementData = ArrayList.this.elementData;
	if (i >= elementData.length){
		throw new ConcurrentModificationException();
    }
	cursor = i + 1;
	return (E) elementData[lastRet = i];
}

增强for

提到迭代器就不得不说,增强for,增强for它的实现就是用的迭代器

增强for使用比迭代器简单

增强for底层是迭代器,当在遍历时删除修改,也会出现并发异常

作用

  • 遍历集合获取每个元素

格式

for(元素类型 元素名 : 集合/数组){
    代码;
}

代码演示

public class TexitFor {
    public static void main(String[] args) {
        //创建Arraylist 集合
        ArrayList<String> list = new ArrayList<>();
        //添加集合
        list.add("CSDN");
        list.add("常家壮");
        list.add("博客");
        
        //增强for实现遍历
        for (String s : list) {
            System.out.println(s);//打印集合元素
        }

    }
}

感觉不足请在评论区,留言