hashmap是否存在线程安全问题?
答案是否定的.为什么呢?因为hashMap的底层是一个数组加链表的结构具体过程如下:
当我们进行存储一个key的时候,根据这个key利用hashMap中的Hash算法得到一个hash值,然后放入数组中,将我们存入的整个HashMap对象存储到entry对象中,随着存储的key的增多,利用hash算法难免会产生一些重复的hash值,而这些相同的hash值被称为发生了hash冲突,如果解决呢?
当发生hash冲突时,hashmap会判断是否为相同的key,如果是,则更改value.如果key不相同,只是hash值相同.那么hashMap会将此对象放到相同hash值的entry对象后面,当发生较多的hash值冲突时,便形成了一条entry链,因此,hashmap的底层是一个数组加链表的 结构.
hahsmap是如何进行key的比较的呢?hashmap会利用equals方法进行key值的比较.
如何解决hashmap的线程安全问题呢? 可以使用concurrentMap。
为什么要Hash?
哈希表是基于数组实现的,哈希算法就是如何将键值转换成数组角标的方法,哈希化可以提供很高的操作(增、删、查)效率,因为对有序数组的查询,即使是二分法查找也只能做到 O(logN),因为哈希可以直接将要查询的key转化为数组角标,所以可以达到O(1)的时间级.
如何解决哈希冲突?
1.再哈希 2.链地址法(hashMap就是用LinkedList解决hash冲突的)