首页 > 其他分享 >HashMap

HashMap

时间:2023-07-18 16:37:29浏览次数:30  
标签:扩容 Node hash HashMap 链表 数组

基本数据结构

数组、链表和红黑树,链表长度大于等于8转化红黑树,链表长度小于等于6退化成链表,中间隔一个7是为了防止数据结构频繁转化,扩容因子0.75

初始化方法

 

put方法

第一步封装Node节点,key和value都在里面

否则 直接hash运算得到数组下标,把值放进去

如果 达到扩容的阈值,先扩容出一个新数组,旧的值进行rehash放进新数组,新值hash放进去

如果hash碰撞,放入Node的下一个节点

 

为什么线程不安全

常规博客说法扩容是不安全的,我认为hash碰撞后,链表的延长(可能会直接变成树结构)也是不安全的,但是概率太低

标签:扩容,Node,hash,HashMap,链表,数组
From: https://www.cnblogs.com/benjerry/p/17552595.html

相关文章

  • required a bean of type 'java.util.concurrent.ConcurrentHashMap' that could
    如何解决"requiredabeanoftype'java.util.concurrent.ConcurrentHashMap'thatcould"错误问题概述在开发过程中,有时我们会遇到SpringBoot应用程序启动时出现"requiredabeanoftype'java.util.concurrent.ConcurrentHashMap'thatcould"错误的问题。这个错......
  • redis用hashmap存数据量增量数据
    Redis使用Hashmap存储增量数据概述在本篇文章中,我将向你介绍如何使用Redis的Hashmap数据结构来存储增量数据。首先,我们将了解整个过程的步骤,并在之后的部分详细说明每个步骤需要做什么以及相应的代码示例。过程步骤步骤描述1连接Redis数据库2创建或选择一个Hashm......
  • 实现concurrentHashMap与redis两级缓存
    一、实现concurrentHashMap与redis两级缓存以下是一种使用ConcurrentHashMap和Redis实现两级缓存的示例代码:importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cache.annotation.CacheEvict;importorg.springframework.cache.ann......
  • HashMap和ConcurrentHashMap
    HashMap结构桶数组+单链表+红黑树(JDK1.8引入)容量是2的幂的原因寻找位置时,(n-1)&hashCode值等价于hash%n,但是&比%具有更高的效率。得到key的hashCode值后,通过二次hash(第一次hash时右移16位,hashCode值高16位与低16位异或操作,高16位保持不变;第二次hash时(n-1)&hashCode值)来......
  • HashMap里面有哪些方法会更改modCount
    modCount是 HashMap 类中的一个成员变量,用于记录 HashMap 结构发生变更(如插入、删除、扩容等操作)的次数。在 HashMap 中,有以下方法会更改modCount的值:1.put(K key, V value):插入一个新的键值对。2.putAll(Map<? extends K, ? extends V> m):将一个 Map 中的所......
  • HashMap 源码阅读
    HashMap源码阅读HashMap是线程不安全的,若需要考虑线程安全则需要用HashTable属性//默认大小1<<4为16staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;//最大2的30次方staticfinalintMAXIMUM_CAPACITY=1<<30;//默认负载因子0.75staticfinal......
  • HashMap的实现原理详解(看这篇就够了)
    一线资深java工程师明确了需要精通集合容器,尤其是今天我谈到的HashMap。HashMap在Java集合的重要性不亚于Volatile在并发编程的重要性(可见性与有序性)。我会重点讲解以下9点:1.HashMap的数据结构2.HashMap核心成员3.HashMapd的Node数组4.HashMap的数据存储5.HashMap的哈希函数6.哈......
  • HashMap的实现原理详解(看这篇就够了)
     一线资深java工程师明确了需要精通集合容器,尤其是今天我谈到的HashMap。HashMap在Java集合的重要性不亚于Volatile在并发编程的重要性(可见性与有序性)。我会重点讲解以下9点:1.HashMap的数据结构2.HashMap核心成员3.HashMapd的Node数组4.HashMap的数据存储5.HashMap......
  • HashMap的遍历方法
    Map<String,String>myMap=newHashMap<>();myMap.put("key1","value1");myMap.put("key2","value2");//for循环遍历for(Map.Entry<String,String>entry:myMap.entrySet()){Stringkey=entry.getKe......
  • Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?
    Photobyhippopx.com我们知道HashMap的底层是由数组,链表,红黑树组成的,在HashMap做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算hash值,因为长度扩大以后,hash值也随之改变。如果是简单的Node对象,只需要重新计算下标放进去就可以了,如果是链表和红黑......