众所周知,HashMap是Java里的一个存储容器,以K:V的方式存储数据,下面就聊一聊它底层的实现原理。
1.创建
Map map = new HashMap();
2.使用
存放数据:map.put("key","value");
删除key数据:map.remove("key");
获取数据:map.get("key");
读取Map-Key数据个数:map.size()
public static void main(String[] args) {
Map map = new HashMap();
map.put("key","val");
map.remove("key");
map.get("key");
map.size();
}
3.数据存储原理
HashMap是采用数组+链表实现的
例如我们要存储 k:2 v:hello的数据
在存储数据时,会把K-V转化成一个kv对象根据key值存储在对应的数组位置上。
完成存储我们会发现一个问题,如果存储字符串类型的key就无法根据数组下标进行存储,为了解决字符串key问题,可以采取对key进行hash计算,将key=iphone的k值进行计算,得出hash值进行相应位置存储。
因为Hash的特性,必然会出现hash重复,这个现象叫做hash碰撞,意思就是不同的原文数据进行hash运算,计算出了同样的值,这样在hashmap中的key里就会覆盖原有数据。
4.HashMap中如何解决hash碰撞
hashmap是通过比较的方式,当进行hash比较后数据相同,会在索引对象中增加next属性,next指向下一个数据对象