java集合类的安全性和不安全性总结

list(不安全)

并发修改异常

java.util.ConcurrentModificationException

导致原因

ArrayList底层没有加锁,它实现了并发性,但是无法保证安全性

解决方案。

(1)使用Vector
(2)使用Collections.synchronizedList(new ArrayList<>());

Vector(JDK 1.0),底层加了锁,能够保证多线程的安全性,但是舍弃了并发性
ArrayList(JDK 1.2),底层没加锁,实现了并发性,但是无法保证安全性

安全性:

List<String> list = new CopyOnWriteArrayList<>();
							//Collections.synchronizedList(new ArrayList<>());//同步集合:安全
							//new Vector<>();  //安全
							//ArrayList<String>();   //不安全

set

底层原理

HashSet的底层数据结构就是HashMap;
在这里插入图片描述
HashSet调用add方法的时候,底层就是在HashMap里面存了一个键为add方法的参数,值为一个常量(PRESENT)的键值对。
在这里插入图片描述

安全性

//set
		Set<Integer> set = new CopyOnWriteArraySet<>();  //安全
//							Collections.synchronizedSet(new HashSet<>());//安全
//							new HashSet<>();		//不安全

Map

安全性:

//map
		Map<Integer, Integer> map = new ConcurrentHashMap<Integer, Integer>();//安全
//							Collections.synchronizedMap(new HashMap<>());//安全
//							new HashMap<>();//不安全
//							new HashTable();//安全

三级目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值