【基础篇】集合

ArrayList,LinkedList的区别(都是效率高,非线程安全)

hashmap,Hashtabl,LinkedHashMap,ConcurrentHashMap的区别 + 底层实现

  • Hashmap(底层数组 + 链表 + 红黑树(RBT)

    • 效率高,非同步,线程不安全,最多只一个键为Null允许值Null
    • 底层原理: Hashmap默认容量16,key的哈希值一制则生成链表,链表默认大小8,超过链表默认大小,自动生成红黑树,红黑树通过变色旋转来保持子父节点平衡。
  • Hashtable(底层哈希表,写入时慢)

    • 线程安全,同步,所以效率要慢一点
    • 不允许 null 值 (key 和 value 都不可以)
  • LinkedHashMap(底层双向链表,先进先出)

    • 保存了记录的插入顺序,在用Iterator遍历时,先得到的记录肯定是先插入的。
  • ConcurrentHashMap(分段锁 - 分段锁其实是一个概念)

    • 了解ConcurrentHashMap前,不妨先看看Hashmap的原理。(视频传送门,看完视频就懂了
    • 简单来说ConcurrentHashMap为每一组哈希槽进行分段上锁,不同组的哈希槽进行数据读写操作互不影响

因为ConcurrentHashMap用到了CAS,这里简单说一下CAS

Unsafe类的CAS无锁机制(比较并替换 + 自旋)

  • CAS需要三个参数,第一个内存位置,第二个预期旧值,第三个预期新值。
  • 如果内存位置的值等于预期旧值,则替换旧值为新值,否则cpu什么都不,简洁点就是:比较并替换
  • 如果不成功,会循环重试,也叫做:自旋
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值