美文网首页
java HashMap的理解

java HashMap的理解

作者: Android程序员老鸦 | 来源:发表于2020-07-24 18:39 被阅读0次

HashMap继承自AbstractMap,由一个哈希数组(哈希表)+链表结构组成,通过对key的hashCode值做hash(哈希函数)运算得到一个存放在哈希数组的角标,进而往哈希表里存入Entry(键值对)


image.png

一般情况下哈希数组的初始大小为11,元素大小超过阈值会按照原来容量的2倍+1的方式自动扩容,阈值由负载因子(默认0.75*容量)决定,扩容的过程会新建一个数组然后把旧数据复制到新数组中
Entry里维护了下一个元素的哈希指向,是一个单向链表结构,这么做的目的是为了防止不同的key进行hash算法后出现冲突(得到一个相同的数组下标),这时候就会把这个Entry放在哈希数组里已有的Entry的后面,从而造成如下图的结构:


image.png

HashMap不是线程安全的,如果要保证线程安全可以使用ConcurrentHashMap

相关文章

  • Java集合-HashSet源码实现分析

    概要 阅读本文前,请先阅读笔者写的文章:Java集合-HashMap源码实现深入解析理解了HashMap,再来理解...

  • java HashMap的理解

    HashMap继承自AbstractMap,由一个哈希数组(哈希表)+链表结构组成,通过对key的hashCode...

  • 深入理解HashMap

    深入理解HashMap 什么是HashMap HashMap作为Java语言中一种重要的类型,其存储数据通过键值对...

  • HashMap 理解

    参考链接:HashMap原理深入理解java中HashMap原理?面试?你是谁,你在哪 HashMap实际上是一个...

  • 初探HashMap源码

    HashMap是java开发中很长用的类,之前对HashMap的理解仅仅停留在日常的使用上,今天尝试从源码去理解下...

  • 2018-03-12

    HashMap in Java HashMap in Redis HashMap in Golang

  • java基础(HashMap理解)

    HashMap其原理是底层是一个table数组+链表,数组的每一项是一个链表头。当然不同的jar包对应的HashM...

  • 理解Java中的HashMap

    我的所有原创Android知识体系[https://github.com/xfhy/Android-Notes],...

  • Java HashMap 和 ConcurrentHashMap

    一文让你彻底理解 Java HashMap 和 ConcurrentHashMap 前言 Map 这样的 Key ...

  • Java8 HashMap源码解析

    前言 Java7中的HashMap和Java8中的HashMap不太一样,Java7中的HashMap主要是由数组...

网友评论

      本文标题:java HashMap的理解

      本文链接:https://www.haomeiwen.com/subject/pkdslktx.html