谈谈集合以及实现集合线程安全的方法


今天 自己在复习集合时想到了集合的种类和继承关系 以及线程安全而发起疑问 本文章谈谈我对集合分类和对集合的想法

集合的种类

集合的继承关系
PS:图片来自网络 侵删

集合类型主要有3种:list(集)、set(列表)和map(映射)。

1、List(有序、可重复)

List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

1.1 ArrayList

优点:操作读取操作效率高基于数组实现的,可以为null值,可以允许重复元素有序异步
缺点:由于它是由动态数组实现的,不适合频繁的对元素的插入和删除操作,因为每次插入和删除都需 要移动数组中的元素。

1.2 LinkeList

优点:LinkedList由双链表实现,增删由于不需要移动底层数组数据,其底层是链表实现的,只需要修改链表节点指针,对元素的插入和删除效率较高
缺点遍历效率较低。HashMap和双链表也有关系。

2、Set(无序、不能重复)

Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

2.1 Hashset

可以存储唯一元素并允许空值 由HashMap支持

2.2 Treeset

可以包含有序的且没有重复元素的集合,通过TreeMap实现。

3、Map(键值对、键唯一、值不唯一)

Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

3.1 hashmap

数组+链表+红黑树实现 元素是无序的 允许 null 值和 null 键 不保证该顺序恒久不变

3.2 Treemap

基于红黑树实现 自动排序

如何让集合实现线程安全

详细请看 https://baijiahao.baidu.com/s?id=1638844080997170869&wfr=spider&for=pc

阅读源码发现Vector的增删改查都添加的 synchronized 关键字

相信你也猜到为什么其他的集合不是线程安全

如 : ArrayList是线程非安全的,因为ArrayList中所有的方法都不是同步的,在并发的情况下一定会出现线程安全问题。

所以我们要实现ArrayList的线程安全只需要在ArrayList实现的方法中添加synchronized关键字来确保线程安全

 今天的文章就分享到这里,如有问题还请批评指正。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值