首页 > 其他分享 >每日一问,请你谈一谈你对HashMap的理解。

每日一问,请你谈一谈你对HashMap的理解。

时间:2024-07-15 08:58:31浏览次数:13  
标签:黑树 key 谈一谈 hash HashMap 元素 一问 链表 数组

  1. HashMap底层是数组加链表的结构,在jdk1.8之后又加入了红黑树。
  2. 当添加一个元素(key-value)时,首先计算键值对的key的hash值,以此来确定插入到数组中的位置;
  3. 允许有null值和null键。
  4. 如果根据hash值确定的数组位置中已经存在元素,就添加到同一个hash值的元素的后面,于是形成了链表;
  5. Entry也就是数组中的元素(K-V),其实每个Map.entry也就是一个key-value键值对,它持有一个指向下一个元素的作用,由此构成了链表。
  6. 当链表长度大于等于8且数组中元素(k-v)个数超过64时,链表就转换为红黑树,这样就提高了查找的效率;
  7. 当红黑树中的节点个数小于6时,红黑树又重新转换为链表;

//注:本人可能由于学习不精,导致文章中出现错误,如有发现,欢迎指导批评,感激不尽。

标签:黑树,key,谈一谈,hash,HashMap,元素,一问,链表,数组
From: https://blog.csdn.net/qq_65734626/article/details/140423084

相关文章

  • Java笔记之HashMap
    HashMap的实现原理HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap底层就是一......
  • LinkedHashMap
    HashMap是无序的,LinkedHashMap是可以维持插入顺序的LinkedHashMap继承了HashMap,内部追加了双向链表,来维护元素的插入顺序//LinkedHashMap.Entry继承了HashMap.NodestaticclassEntry<K,V>extendsHashMap.Node<K,V>{//并追加了连个字段before和after,用来......
  • HashMap
    HashMap的实现原理是基于哈希表的,它的底层是一个数组,数组的每个位置可能是一个链表或红黑树,也可能只是一个键值对。当添加一个键值对时,HashMap会根据键的哈希值计算出该键对应的数组下标(索引),然后将键值对插入到对应的位置。当通过键查找值时,HashMap也会根据键的哈希值计算......
  • HashMap和ConcurrentHashMap的底层实现原理
    (1)HashMap底层实现原理在JDK1.7版本之前,HashMap数据结构是数组和链表,HashMap通过哈希算法将元素的键(Key)映射到数组中的槽位(Bucket)。如果多个键映射到同一个槽位,它们会以链表的形式存储在同一个槽位上,因为链表的查询时间是O(n),所以冲突很严重,一个索引上的链表非常长,......
  • [Java基础]HashMap
    HashMapHashMap的数据结构HashMap是:数组+链表/红黑树(JDK1.8增加了红黑树部分)数据底层具体存储的是什么?Node<k,v>这样的存储方式有什么优点呢?数据结构//默认初始容量(数组默认大小):16,2的整数次方staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;//最大......
  • HashMap和ConcurrentHashMap对比源码分析
    1.1HashMap分析1.1.1JDK7的HashMap HashMap在日常开发中是很常见的,在JDK7中其底层是由数组+链表构成,数组被分成一个个桶(bucket),通过哈希值决定了键值对在这个数组中的位置。哈希值相同的键值对,会以链表形式进行存储。每一个键值对会以一个Entry实例进行封装,内部存在四个......
  • HashMap的插入及扩容过程(必看)
    1.初始化当我们创建一个HashMap实例时,初始化过程如下:Map<Integer,String>map=newHashMap<>();在初始化时,HashMap进行以下操作:默认容量和加载因子:默认容量为16。默认加载因子为0.75。临界值(Threshold):临界值=容量*加载因子,即16*0.75=12。这意味着当......
  • 在Java中,Map 接口的实现(如 HashMap,LinkedHashMap,TreeMap 等)并不保证遍历 keySet() 或
    在Java中,Map接口的实现(如HashMap,LinkedHashMap,TreeMap等)并不保证遍历keySet()或entrySet()时的顺序。但是,某些特定的Map实现确实提供了特定的遍历顺序。1、HashMap:它基于哈希表实现,并不保证映射的顺序,特别是遍历顺序。因此,当你使用map.keySet()遍历HashMap时,结果可......
  • Java-HashMap和ConcurrentHashMap的区别
    Java-HashMap和ConcurrentHashMap的区别一、关键区别1.数据结构2.线程安全3.性能4.扩容机制二、源码简析1.并发控制机制2.数据结构转换:链表转红黑树3.扩容机制触发hashMap和concurentHashMap扩容机制的条件三、putIfAbsent方法computeIfAbsent方法区别​在Java......
  • [Java并发]ConcurrentHashMap
    ConcurrentHashMapHashMap和ConcurrentHashMap的区别主要区别就是hashmap线程不安全,ConcurrentHashMap线程安全HashMap线程不安全,有以下两个问题put覆盖问题比如有两个线程A和B,首先A希望插入一个key-value对到HashMap中,首先计算记录所要落到的桶的索引坐标,然后获取到该桶......