Android面试一问一答:HashMap

HashMap的工作原理

  • HashMap底层由数组实现,是基于hashing原理,我们通过put()和get()方法存储和获取对象。
  • 在存储时,首先我们通过key的hashCode()方法拿到key的哈希值,然后我们通过哈希算法,用拿到的哈希值计算出这个key、value节点的引用在数组中存放的位置,完成存储。
  • 在获取时,我们同样根据key的哈希值,通过同样的哈希算法,获取到该节点在数组中的位置。

如果两个不同的key计算得到的hashcode相同会怎样

  • 首先,我们的key、value是以一个节点对象存储的,数组当中存放的是该节点的引用。
  • 其次,该节点实现了链表结构。
  • 在存储时如果数组中对应位置已经存在有效节点,我们会将新的节点的引用放到这个位置,然后这个新的节点的next成员变量指向之前这个位置的旧节点的引用。
  • 在获取的时候,我们首先在数组中找到这个位置,然后遍历,根据键对象的equals()方法确定出具体的值。

HashMap与HashTable的异同

  • HashMap不是线程安全的
  • HashMap可以允许key或者value为null。

参考:
https://www.jianshu.com/p/45fa4e80b631

    原文作者:LvStudio
    原文地址: https://www.jianshu.com/p/3906ad9bb57f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞