HashMap和HashTable的区别

1、hashmap和hashtable基本定义

hashmap:允许key和value都为空,线程不安全;

hashtable:不允许空值,线程安全;

hashmap :数组+链表+哈希算法(MD5);

2、基本数据结构:数组、链表、红黑树

程序 = 数据结构 + 算法

  • 数组:一段连续的存储单位,在创建时指定大小。查询快,新增删除慢;如ArrayList;

  • 链表:查询慢、新增删除快;pre指向前一个,next指向后一个;如LinkedList双向链表;

  • 红黑树:左中右的结构,查询快、新增删除慢;TreeNode;

3、hashmap的底层实现

hashmap : key、value;

put:hash(key)计算key的哈希值(假设469),之后取模(mod,假设%10),得出存储位置9;此时将新建一个数组,假设大小为9,此时arr[9] =value1;若出现hash冲突,则将该数据扩充为链表,此时arr[9]=value2,next指向value1;当取模超出数组大小时,会进行数组扩容,将原来的数据放到新的大数组中;hashmap默认使用链表,当链表长度大于8(默认)时,会将链表转为红黑树

get:hash(key)求出哈希值,之后取模找到存储位置,比较哈希值是否相等,若不相等则查找next是否相等,递归调用一直查找到对应的value;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值