hashmap的特性:
1.hashmap是键值对存储实现快速存储,允许为null,key键不可重复,若键重复值将覆盖;
2.非同步,线程不安全;
3.底层是hash表不能保证有序性。
hashmap底层原理:
1.是基于hash的原理,(jdk7是数组和链结构)jdk8后采用了数组+链表+红黑树的数据结构,通过get和put方法进行存储和获取对象,
当我们给put方法传递键和值时,先对键做一个hashcode()的计算得到它在bucket数组中的位置来存储entry对象。当获取值时,通过get获取到bukect的位置,再通过键对象的equals方法找到正确的键值对,和然后返回对象。
hashmap中的put是如何实现的:
1.计算key的hashcode值
2.如果散列表为空,调用resize()初始化散列表
3.如果没有发生碰撞,直接添加元素到散列表中
4.如果发生碰撞1.若key值hashcode值和equals相同,替换。2.如果是红黑树结构,则调用树方法插入。
5.如果桶满了大于阀值,则resize扩容。
两个对象hashcode值相等时:
会产生hash碰撞,若key值相同则替换旧值,不然链接到链表后面,链表长度到达8时转成红黑树。
两个键的hashcode值相等
hashcode相同时,使用equals方法比较内容获取对象。
如果hashm