集合输出

集合输出

1.Collection输出

集合框架与Colleaction

2. foreach(增强for循环) :语法糖

集合框架与Colleaction

本质上也为迭代器输出

Collection接口能采用foreach输出的本质在于:所有子类都实现了Iterator接口

**语法糖:**只存在于代码代码编译阶段 例如:泛型,自动拆装箱,foreach()

3.ListIterstor (双向迭代输出-只有List接口有)

3.1 方法

要想使用从后向前输出,必须先从前到后输出一次

boolean hasPrevious();//从后向前输出
E previous();

4. Enumeration(枚举输出-只有Vector及其子类Stack才有)

Vector独有枚举输出

4.1 方法

1,判断是否有下一个元素

boolean hasMoreElements

2,取得元素

public E nextElements() 

5.快速失败策略(fail-fast)

5.1 什么是快速失败

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

/**
 * @Name:
 * @Author:ZYJ
 * @Date:2019-06-22-19:29
 * @Description:
 */
public class IteratorTest {
    public static void main(String[] args) {
        List<String> list = new Vector<>();
        list.add("hello");
        list.add("java");
        list.add("hello");
        list.add("world");
        Iterator<String> iterator= list.iterator();
        while (iterator.hasNext()){
            list.remove("hello");
            System.out.println(iterator.next());
        }

    }
}

上述程序会产生如下异常

java.util.ConcurrentModificationException

在这里插入图片描述

优先处理异常情况,出现异常情况发生,直接向用户抛出异常,程序终止;

fail-fast保证集合在多线程场景下读到正确的值。

java.util.的集合类大多数都采用此策略(ArrayList,Vector,LinkedList,HashSet),这些类读写都在同一个子类。

fail-safe:不会抛出并发修改异常(ConcurrentModificationException)

java.util.concurrent:下的子类都属于此集合:CopyOnWriteArrayListconcurrentHashMap

CopyOnWriteArrayList采用读写分离,所有的读为异步操作,写为同步操作,且读写不再一个副本中

在迭代输出集合时,并发修改了集合的结构

在Collection接口及其子类中有 modcount参数:用于记录集合修改(add、remove)的次数

protection transient int modCount=0;

在迭代器内部:维护属性 exceptedModCount,用于取得集合迭代器时的modCount

int exceptedModcount=modCount;
final void checkForComodification(){
    if(modcount!=exceptedModeCount){
        throw new ConcurrentModificationException();
    }
}

5.2 如何避免并发修改异常

1,迭代输出的时候,不要修改集合内容

2,使用迭代器的修改方法。(迭代器的remove方法会将modcount和exceptedModCount动态修改);

n();
}
}


### 5.2 如何避免并发修改异常

1,迭代输出的时候,不要修改集合内容

2,使用迭代器的修改方法。(迭代器的remove方法会将modcount和exceptedModCount动态修改);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值