数据结构

  • 数组+链表

    1. ![](https://cdn.nlark.com/yuque/0/2022/jpeg/25780490/1641118940158-7b4f65e7-b6e3-40af-bde1-72325e502c31.jpeg#clientId=u31de1421-b411-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=393&id=udadcbb2d&margin=%5Bobject%20Object%5D&originHeight=484&originWidth=625&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u48809457-e22a-4265-a955-2928ffa78e3&title=&width=507)

    HashMap 基于 Hash 算法实现的

  1. 当我们往Hashmap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标
  2. 存储时,如果出现key的hash值对数组长度取模后对就的下标的位置已经有元素了,此时有两种情况。

    1. (1) 如果key相同(这里面指的相同是当keyhash值和keyequals方法得到的值都 相等时),则覆盖原始值;<br /> (2) 如果key不同,则将当前的key-value头插法放入链表中
  3. 获取时,直接找到hash值对应的下标,在进一步判断key是否相同(指的意思同上),从而找到对应值。

  4. 理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。