• HashMap问题


    一、什么是HashMap

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

    二、HashMap的继承关系

    三、HashMap数据结构

    橙色是一个数组,每个数组关联一个Entry链表。
    下面是一个entry的数据结构,包含hash值,key,value和指向下一个entry的链接

    hash key value next

    四、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的数组中

  • 相关阅读:
    文件管理
    权限管理
    用户和用户组
    BZOJ2957: 楼房重建(线段树&LIS)
    BZOJ2938: [Poi2000]病毒(AC自动机)
    BZOJ2935: [Poi1999]原始生物(欧拉回路)
    BZOJ4033: [HAOI2015]树上染色(树形DP)
    LightOJ
    LightOJ
    BZOJ4917: [Lydsy1706月赛]Hash Killer IV(模拟)
  • 原文地址:https://www.cnblogs.com/cgfpx/p/11649137.html
Copyright © 2020-2023  润新知