当前位置: 首页 > article >正文

关于HashMap的put方法

前言:

HashMap的底层是数组加链表的形式实现,是线程不安全的,在jdk1.7之前put都是采用的头插法,但是使用头插法在多线程的环境下是有可能导致死循环,所以在jdk1.8就将put方法改成了尾插法。

1.产生死循环的原因:

下面通过图解来解释:(jdk1.7:头插法:顺序:C,B,A)

 通过扩容操作原本A-B-C的链表结构变成C-B-A。

 

2.解决方式:

通过synchronized(加锁)的方式来解决,但是不可避免在多线程环境下会产生阻塞,从而导致效率,速度都降低(开发中不允许出现,迫不得己的方式)。

在jdk1.8中提供了解决方式:将头插法改成尾插法,在这个过程势必会涉及到遍历链表(不如头插法快,但是HashTable中由于线程是安全的,所以还是使用的头插法),降低效率。 


http://www.kler.cn/a/297090.html

相关文章:

  • Matlab/Simulink中PMSM模型的反电动势系数和转矩系数
  • 掌握数据库与SQL
  • Appium使用指南与自动化测试案例详解
  • C++——关联式容器(2):AVL树(平衡二叉树)
  • 猜数游戏-Rust 入门经典案例
  • 滚雪球学Java(89):Java GUI入门与进阶:AWT核心概念深度解析,有两下子!
  • 【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算
  • 单片机工程师:创新与挑战之路
  • 网站安全需求分析与安全保护工程
  • SprinBoot+Vue校园数字化图书馆系统的设计与实现
  • Android Fragment 学习备忘
  • guava-Immutable(不可变集合)
  • MybatisPlus 快速入门
  • 硬件工程师笔试面试知识器件篇——电容
  • ActiveMQ 反序列化漏洞复现(CVE-2015-5254)
  • 编译安装调试 scaLapack 和 openmpi 以及 lapack
  • 干货分享:2024四大录音转文字工具推荐!
  • 构建Web3社交平台:DeBox式DApp开发全攻略
  • docker-mysql容器数据卷挂载
  • Qt_环境搭建