HashMap
来源:互联网 发布:淘宝不能结算怎么回事 编辑:程序博客网 时间:2024/06/05 03:28
转载自漫画算法
转载自微信公众号“算法爱好者”
摘要
1.put方法的原理
2.get方法的原理
3.HashMap的长度
正文:
HashMap是一个用于存储key-value键值对的集合,每一个键值对也叫作Entry。这些键值对分散存储在一个数组中,这个数组就是HashMap的主干。
1.put方法的原理
比如调用 hashMap.put("apple", 1);插入一个key为“apple”的元素,这时候,需要一个hash函数来确定Entry的位置。
index = Hash("apple");
假定,最后计算出的index是2,那么结果如下:
但是,因为HashMap的长度是有限的,当插入的Entry越来越多时,再完美的Hash函数也会出现index冲突的情况,比如:
这时候利用链表来解决。
HashMap的每个元素不只是Entry对象,也是一个链表的头结点。每个Entry对象通过Next指针指向它的下一个Entry节点。当新来的Entry映射到冲突的数组位置时只需插入到对应的链表即可。
需要注意的是,新来的Entry节点插入链表时,使用的是头插法。是因为HashMap的发明者认为,后插入的Entry被查找的可能性更大。
2.get方法的原理
比如调用hashMap.get("apple");
首先会把输入的key做一次Hash映射,得到对应的index。
由于刚才所说的Hash冲突,同一个位置有可能匹配到多个entry,这时候就要顺着对应链表的头节点,一个一个向下来查找。
假设我们查找的key是apple:
3.HashMap的长度
默认长度是16,并且每次自动扩展或者手动初始化时,长度都是2的幂。
选择2的次幂是服务于从key映射到index的Hash算法(key的hashcode和(length-1) 进行位运算,也就是从hashcode的后几位定位entry的index)
阅读全文
0 0
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- hashmap
- HashMap
- HashMap
- HashMap
- hashmap
- HashMap
- Hashmap
- break、continue、return的区别
- sas中连接mysql数据库,中文乱码问题解决
- Net-snmp总结(四)-net-snmp的MIBs扩展_添加set
- mysql事务
- 哈夫曼树结构和带权路径长度计算
- HashMap
- 旋转数组的最小数字
- springMVC框架下返回json格式的对象,list,map
- websocket实现android消息推送
- RevitAPI: 注意Revit 2016事件注册和注销行为的改变
- MXNet 多rec参与训练
- MongoDb 将 BsonDocument 集合 转换为强类型 List
- groovy之list和map方法
- 小程序点击获取循环列表中的内容