HashMap底层结构及其它几点总结

本文主要有以下几点内容

  • HashMap的底层结构
  • HashMap和HashTable的不同
  • HashMap为什么线程不安全
  • 多线程环境怎么使用HashMap
  • 哈希分布

一、首先我们来看看HashMap的底层结构

  • 哈希表
  • 箱(bin)或者桶(bucket)

  HashMap的数据结构可看做是分桶(分箱)的哈希表,可称为哈希桶。即按照key(键)的哈希值分桶。桶的大小跟冲突有关,碰撞的key多,桶就大,反之桶就小。

桶的基本单元:Node<K,V> 组成normal 桶、TreeNode<K,V> 组成tree 桶

冲突不多(未超过门限设定门限)时,桶就普通的Node<K,V>桶。当冲突太多,桶变得很大时(超过设定门限)桶就变成TreeNode<K,V>桶。

为什么会有TreeNode:
  因为TreeNode和TreeMap一样,存储的是经过排序的对象,在容量较大(冲突较多)的情况下,取出目标对象的速度要比遍历链表快的多。当然normal 桶变成tree 桶随之带来的也有复杂性,是一种牺牲空间换时间的方法,不过这在key的哈希分布非常糟糕的情况下是值得的。

二、HashMap和HashTable的不同
  JDK中明显说明,Ha

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值