hashmap:
hashmap实现了map接口,map接口是对键值对的一个映射,map中不允许出现重复的key,但是key和value都可以为空,而且hashmap线程不安全。因为它是非synbchronized的,都是collection集合的方法可以保证synchronized,所以hashmap也是可以被保证synchronized,多个线程访问它的时候,只能有一个线程更改map。
hashmap底层实现原理:
首先hashmap它是一个entry对象组成的数组,entry对象又是key,vlaue形式的键值对,我们可以根据Key去用hashcode()去计算相应的哈希值,再通过哈希值去计算它在数组中的索引,找到索引,如果是null,就是直接插入,如果不为空,就做循环遍历,找到相同哈希值的对象,然后对比key,如果哈希值相同,key相同,就是把vlaue进行覆盖,如果key不同,就把这个对象进行链表尾插,长度超过8就变成红黑树。
hash冲突:
就是我们根据不同的key计算的哈希值相同,也就是我们根据他的索引找到具体地址,发现已经有值了,就会发生冲突。
解决办法:
1、连地址法:就是把hashmap的实现,我们知道索引位置,去形成链表,做尾插操作,超过8就变成红黑树
2、再哈希法:就是再次去构造哈希函数,计算出不同的哈希值,这样就不会产生冲突了。
3、建立公共溢出区:把哈希表分成公共表和溢出表, 当发生溢出时,就把溢出数据放到溢出表中。