HashMap的简单理解

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冲突的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值