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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容