查询已有链表的hashmap_HashMap问答

一、什么是HashMap

HashMap是一个key-value集合,结合了数组和链表的优点,提供快速查询、新增、修改map节点的功能

二、HashMap的继承关系

b42f69c63329bba324143c53151659b0.png

三、HashMap数据结构

橙色是一个数组,每个数组关联一个Entry链表。

下面是一个entry的数据结构,包含hash值,key,value和指向下一个entry的链接

hash

key

value

next

44ababc51481af4a533465526b559e1f.png

四、HashMap查找、添加元素是怎样的

添加元素put:先对key进行hash,根据hash值定位到数组下标(每个数组元素对应的是一个entry链表),如果无元素则成为第一个元素,如果有元素则循环链表,有key相同的entry则覆盖,没有则将新元素放在链表头,并指向原来的第一个元素

查找元素get:先对key进行hash,根据hash值定位到数组下标,然后循环链表,找到key相同的entry并返回value

五、什么是Hash碰撞

步骤四种put时,如果新增entry定位的数组下标已有元素就发生hash碰撞,因为最好的分配是每个数组元素只包含一个entry,这样时间复杂度就是O(1),如果包含多个元素,查找的时候就需要循环链表,时间复杂度就是O(n)

六、HashMap是线程安全的吗?

不是,如果多个线程同时put元素,key相同的时候,可能会发生后面的put覆盖前面的key。

七、HashMap怎样处理null

HashMap允许key、value都为null,null会存放在索引为0的数组中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值