HashMap
存储数据方式:K,V
底层存储:数组加链表结构
什么是数组?
数组:采用连续的数据单元来存储数据
数组结构的特点:查询速度比较快,插入速度很慢。 那为什么插入速度慢呢? 因为:当你插入,删除数据的时候,底层数组会发生变化假如你把 2 这个节点删除掉后,后面的节点会向前移位,如果不移位局断开了,所以插入,删除很慢
链表:非连续,非顺序的数据结构
特点:插入快,查询比较慢
HashMap存储数据: 数据存储位置是根据 map中的K 去调用hash散列算法生成一个hash值来确定位置,如果位置相同,首先去下标去寻找该位置上是否存在数据,如果存在数据就会存储到该位置下的链表结构中 ------->next 并指向该位置 也就是我们面试常说的hash碰撞
HashMap获取数据:首先通过K能得到hash值,可能发现该数据下并不是我们想要的数据,接下来会拿hash值 ------>next数组链表下去比较hash值得大小,相等的话会将数据取出来
起初创建Map元素为0 根据元素计算出他的hash值后放入一个桶中,如果第二个元素计算出来位置与第一个一样会放入同一个桶内一链表形式存储,根据hashCode当链表长度大于或等于阈值(默认为 8)的时候,如果同时还满足容量大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于 6 个以后,又会恢复为链表形态,