HashMap实现原理详解
来源:互联网 发布:数据库与数据仓库 编辑:程序博客网 时间:2024/06/05 17:00
HashMap定义
HashMap实现了Map接口,一种将键映射到值得对象。
一个映射不能包含重复的键;每个键只能映射到一个值上。
HashMap的元素是无序的。要实现有序排列必须实现hashcode()方法和equals()方法。HashMap的继承关系。
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
HashMap继承了AbstractMap,实现了Map接口。
HashMap的实现原理
1.HashMap的存放采用线性表的存储方式。
线性表的大小会根据你给出的大小,由系统自动分配给你响应的空间。
实际上分配的是2的次方大小。(例如:你给了5个值,系统会自动分配给你2的3次方也就是8)
2.每个值存放的是键值对,也就是Entry
static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash;}
用图解释他的存放原理。
1. HashMap存放的是键值对。也就是Entry。 其中key和value分别对应了其中的键和值。next存放的是下一个的地址。其中hash是由key进过hashcode()方法进行计算,得到的hash值。
2. 然后再进行散列计算。散列计算大体上来说就是进行求余计算。根据系统分配的大小。用这个大小进行求余计算,然后根据求余结果存放到相应的位置。然后进行equals方法进行判断。如果没有值和他相等。就放在整个链表的首部位置。
3.其中,有一个加载因子的问题。也就是说,没次系统分配内存大小时。都会根据2的几次方再乘以加载因子的大小。取值为0<=p<=1.
每次当线性表填满时。他会进行扩容。也就是乘以2。这是内存大小发生变化,就会进行reHash操作。然后重新分配相应的位置。加载因子的大小最好为0.75。
阅读全文
0 0
- hashmap实现原理详解
- HashMap实现原理详解
- HashMap实现原理详解
- 详解HashMap内部实现原理
- HashMap实现原理分析(详解)
- HashMap实现原理分析(详解)
- HashMap实现原理分析(详解)
- Java HashMap 的实现原理详解
- Java HashMap 的实现原理详解
- Java HashMap 的实现原理详解
- Java HashMap的实现原理详解
- Java HashMap 的实现原理详解
- HashMap实现原理分析-resize()详解
- Java中HashMap详解 - HashMap源码及实现原理
- Java HashMap实现原理2——HashMap详解
- HashMap原理机制详解
- HashMap工作原理详解
- HashMap原理及详解
- 星型模型和雪花型模型比较
- nginx client sent invalid request while reading client request line
- 过滤器(Filter)和拦截器(Interceptor)的区别
- C语言入门第十一篇,goto语句
- 1
- HashMap实现原理详解
- 使用spyder3调试python程序的简明教程
- 最左原位、完全二叉树计数、快速N次方
- 主从复制GTID模式下主库binary log被删除后的处理方法
- Eclipse安装SVN的步骤
- CentOS下安装配置SVN简易步骤---实际操作记录
- Hadoop免密登录之SSH协议
- Unity写EXCEL
- 价值2.5万美金的思维方法