Collection集合遍历的三种方法

1.foreach循环遍历

格式:for(元素的数据类型 变量名:数组或集合){

}

2.使用迭代器遍历

方法名称:Iterator<E> iterator()

说明:返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素。

示例:

List<String> list = new ArrayList<>();
        list.add("王");
        list.add("小");
        list.add("王");
        list.add("小");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next());
        }

迭代器初始在集合的第一个元素,while循环判断条件为当前元素是否为空,打印时的.next()是将索引遍历到下一个元素。

3.Lambda表达式

方法名称:default void forEach(Consumer<? super T> action)  

说明:结合lambda遍历集合

 Set<String> set = new HashSet<>();
        set.add("王");
        set.add("小");
        set.add("王");
        set.add("小");
      
        //用Lambda表达式遍历set
        set.forEach (new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

4.认识并发修改异常问题

遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象称为并发修改异常问题。

图中通过for循环删除包含枸杞的元素,但是没有删除干净,就是发生了并发修改异常问题

原因是,当for循环中的索引i在第一个元素时,该元素不包含枸杞,i++,索引遍历至第二个元素,第二个元素包含枸杞,删除,i++,索引遍历至第三个元素,但此时红枸杞元素会因黑枸杞的删除而前移,至第二个元素,所以红枸杞未判断,没有删除。

解决并发修改异常问题的方案
① 如果集合支持索引,可以使用for循环遍历,每删除数据后做i--;或者可以倒着遍历
②)可以使用迭代器遍历,并用迭代器提供的删除方法删除数据。

注意:增强for循环/Lambda遍历均不能解决并发修改异常问题,因此增它们只适合做数据的遍历,不适合同时做增删操作,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值