hashMap实现的原理

Map<String,String> map3 = new HashMap<String,String>();
map3.put("柳志崇", "01");
map3.put("柳山왡", "02");
System.out.println(map3.get("柳志崇"));

System.out.println(map3.get("柳山왡"));


hashmap实现原理:

map存储时可以使null值,null键;

当为null键的时候,数据排在第一位;

线程不安全,不是同步的;

无序的;

key值相同的时候,hashcode一定相同,但是hashcode相同的时候,key不一定相同

hashmap是基于哈希表实现的
哈希表是由数组加链表形式实现的:数组的特点是插入、删除困难,寻址容易,链表的特点是插入删除容易,寻址困难;

int hash = key.hashCode();

hashcode值是通过取模来得到的,所以会出现key值不同,hashcode值相同的问题,相同的key值,hashcode一定相同,map是通过put(K,V)来存储数据的,根据key值生成hashcode值,存放到数组的对应位置,如果差生hashcode相同的情况,就会产生冲突,当产生冲突的时候,map是这样处理的,判断key值是否相同,如果相同,直覆盖对应位置的value值,当通过get(key)取数据的时候,取出的是最后一次放入的数据;


前面说过因为hashcode是通过取模运算,会出现不同的key产生相同的hashcode值,存入数据的时候会产生冲突,看源码是先判断key值是否相同,先根据hashcode查询对应数组的位置是否存在值,如果不存在直接插入数据,如果存在数据,并且key值还不相同,数据将会存储在一个链表中,保存到下一个节点,当用get(KEY)取数据的时候,通过key.equals(key),取出对应的数据;










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值