HashMap:

线程不安全,不支持并发操作,键-值(key-value)都允许为空、、不保证有序

在 JDK1.7 中,HashMap 采用头插法插入元素,因此并发情况下会导致环形链表,产生死循环。

虽然 JDK1.8 采用了尾插法解决了这个问题,但是并发下的 put 操作也会使前一个 key 被后一个 key 覆盖。

由于 HashMap 有扩容机制存在,也存在 A 线程进行扩容后,B 线程执行 get 方法出现失误的情况。

默认初始化容量为 16,扩容容量必须是 2 的幂次方、最大容量为 1<< 30 、默认加载因子为 0.75。

HashMap底层是通过链表来解决hash冲突的。

数据结构

JDK1.8之前:数组+链表

JDK1.8之后:数组+链表+红黑树(链表超过 8 会转化为红黑树)

ConcurrentHashMap:

线程安全,支持并发操作,键-值(key-value)不允许为空

源码:

数据结构

JDK1.8之前:数组+数组+链表,

JDK1.8之后:数组+链表+红黑树

HashMap和ConcurrentHashMap相关推荐

  1. Hashtable,HashMap,ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的

    多选 Hashtable,HashMap,ConcurrentHashMap都是Map的实现类,它们在处理null值的存储上有细微的区别,下列哪些说法是正确的:答案在文末 A. Hashtable的K ...

  2. Java7/8 中的 HashMap 和 ConcurrentHashMap

    Java7 HashMap  数组+链表 Java7 ConcurrentHashMap   Segment数组+HashEntry数组链表+ReenTrantLock分段锁 Java8 HashMa ...

  3. Java 7:HashMap与ConcurrentHashMap

    从我过去有关性能的文章和HashMap案例研究中可能已经看到,Java线程安全性问题可以很轻松地使Java EE应用程序和Java EE容器崩溃. 在对Java EE性能问题进行故障排除时,我观察到的 ...

  4. HashMap与ConcurrentHashMap的测试报告

    日期:2008-9-10 测试平台: CPU:Intel Pentium(R) 4 CPU 3.06G 内存:4G 操作系统:window server 2003 一.HashMap与Concurre ...

  5. java+线程安全的hash,多线程下HashMap安全问题-ConcurrentHashMap解析

    Java1.5 引入了 java.util.concurrent 包,其中 Collection 类的实现允许在运行过程中修改集合对象.实际上, Java 的集合框架是[迭代器设计模式]的一个很好的实 ...

  6. HashMap、ConcurrentHashMap原理分析

    集合(Collection)是编程中常用的数据结构,而并发也是服务器端编程常用的技术之一,并发总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存 ...

  7. HashMap与ConcurrentHashMap万字源码分析

    HashMap与ConcurrentHashMap`源码解析 JDK版本:1.7 & 1.8 ​ 开发中常见的数据结构有三种: 1.数组结构:存储区间连续.内存占用严重.空间复杂度大 优点:因 ...

  8. Java之HashMap系列--ConcurrentHashMap的原理

    原文网址:Java之HashMap系列--ConcurrentHashMap的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java中的ConcurrentHashMap的原理. JDK7与J ...

  9. Java Collection系列之HashMap、ConcurrentHashMap、LinkedHashMap的使用及源码分析

    文章目录 HashMap HashMap的存储结构 初始化 put & get put元素 get元素 扩容 遍历Map jdk1.8中的优化 ConcurrentHashMap jdk1.7 ...

  10. 分析HashTable、HashMap、ConcurrentHashMap的结构、初始化及扩容机制

    目录 一.前沿 二.HashTable 三.HashMap Jdk1.7 Jdk1.8 四.ConcurrentHashMap Jdk1.7 Jdk1.8 五.总结 一.前沿 相信很多同学对HashT ...

最新文章

  1. 输入和if else和switch的应用
  2. python中处理日期和时间的标准模块是-Python时间相关处理
  3. async/await工作机制探究--NodeJS
  4. time_t和字符串间的转化
  5. Hadoop HDFS分布式文件系统 常用命令汇总
  6. plc tcp ip通讯怎么只能连一个客户端_浅谈西门子plc的profinet功能的开放式通信功能...
  7. 收集、报告或保存系统活动信息:sar命令
  8. 【NOIP模拟】图论题Graph
  9. iphone微信电话不弹出_iPhone快速分享电话号码的方法!
  10. 最新仿7881游戏装备网虚拟物品交易源码+修复版
  11. 【亲测可用】win7下移动硬盘无法访问,拒绝访问位置不可用时的解决方案!
  12. android开发_ViewGroup(组视图)-- 五大布局
  13. Pointer Network指针网络
  14. 文件服务器批量权限修改,服务器文件批量权限设置权限
  15. Enigma密码机初级解析
  16. 北京航班延误_预测航班延误
  17. Python利用Face++实现身份证件图片识别
  18. scratch-blocks教程(一)
  19. 宝塔面板PM2 nodejs自动化部署
  20. 黑马程序员————数组(day4)

热门文章

  1. [xsd学习]xsd介绍
  2. 瀑布流插件|jquery.masonry|使用demo
  3. KingPaper初探ThinkPHP3.1.2之目录部署(二)
  4. 2008秋季-计算机软件基础-未交实验报告名单
  5. 【Breadth-first Search 】279. Perfect Squares
  6. 1115. Counting Nodes in a BST (30) 数据结构
  7. java 打印 模板_Java输入输出模板
  8. centos 源码安装mysql5.6_CentOS 7下源码安装MySQL 5.6
  9. 7-1 叶节点求和 (30 分)
  10. css划上去变长,Css3如何实现鼠标移上变长特效?(图文+视频)