关于集合的讨论

1.List与Set的区别?用实验证明出来。

2.HashSet与TreeSet的区别?用实验证明出来。

3.ArrayList与LinkedList的区别?

4.列举几个线程安全的容器。HashMap不安全 为什么我们还常用他 如何规避安全问题

 

补充:普通集合的遍历删除

1.普通foreach+if做遍历删除 大概率抛出 并发修改异常

2.单线程环境下 可用Iterator迭代器做遍历删除

3.多线程环境下 安全地遍历删除 只有代码中做加锁操作才能达到 

-线程安全的容器用普通foreach+if也可以安全地遍历删除 是因为线程安全的容器 内部实现了锁机制 一般用ReentrantLock做的

 

一.List/Set

1.List<T>遵循放入顺序 成员可重复

2.Set<T>不遵循放入顺序 成员不可重复

-内部判重用hashcode()与equals()双重判断

二.HashSet/TreeSet

-HashSet set=new HashSet(不可传入比较器);

-TreeSet set=new TreeSet(可传入比较器);

-可传入比较器 才能做到自定义排序

四.列举几个线程安全的容器

-Vector CopyOnWriteArrayList

-HashTable ConcurrentHashMap

-很多线程不安全的容器使用率很高 是因为用其他方法规避了安全问题 比如定义在方法内部(栈封闭) ThreadLocal封闭等等 或业务上有加锁机制

-即使是线程安全的容器 也只能保证单步api操作具备原子性

-ConcurrentHashMap 比较特殊 在线程安全得以保证时还能有很高的并发性能 因为采用了分段锁机制

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值