HashTable、HashMap、ConcurrentHashMap的区别
2024-10-18 12:33:02
- HashTable是做了同步的,HashMap未考虑同步。所以HashMap在单线程情况下效率较高;HashTable在的多线程情况下,同步操作能保证程序执行的正确性。
- HashMap是非线程安全的,HashTable是线程安全的。因为HashTable是做了同步的,HashMap未考虑同步。HashMap是非线程安全的,解释:当有多个线程在运行程序的时候,有一个线程对HashMap进行循环get,突然有一个线程对HashMap插入或者删除等操作,就会抛出异常。
- HashMap的键值对都允许有null存在,而HashTable则都不行,如果HashTable中的键值只要有一个null,直接抛出NullPointerException。ConcurrentHashMap也是键值都不允许有一个null。
- 由于同步、哈希性能等原因,性能肯定是HashMap更佳,因此HashTable已被淘汰。
- 默认初始化数组的大小不同,HashMap默认初始化数组的大小为16,HashTable为11。前者扩容时乘2,使用位运算取得哈希,效率高于取模。而后者为乘2加1,都是素数和奇数,这样取模哈希结果更均匀。
- HashTable使用的是synchronized关键字,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。
一篇关于ConcurrentHashMap原理分析的不错的博客------------------------http://www.cnblogs.com/ITtangtang/p/3948786.html
一篇关于HashMap、HashTable以及ConCurrentHashMap异同详细比较的博客------------------http://blog.csdn.net/seu_calvin/article/details/52653711
最新文章
- windows远程连接Linux(Ubuntu)的方法
- 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
- ios-UIWebView中js和oc代码的互调
- VS2010远程调试
- C# this关键字详解
- BZOJ 3901 棋盘游戏 解题报告
- 安装java memcached client到本地maven repository
- Android(java)学习笔记243:多媒体之视频播放器
- Spring MVC 如何防止XSS、SQL注入攻击
- 基于jQuery的上下无缝滚动应用(单行或多行)
- HDU4734(数位dp)
- Vuthink正确安装过程
- java.lang.IllegalArgumentException: Document base E:\Eclipse\workspace\.metadata\.plugins\org.eclips
- 源码安装xadmin及使用
- SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页
- 当你想要在conda指定的某个环境中安装包的方法
- MySQL数值类型
- Borg Maze POJ - 3026 (BFS + 最小生成树)
- PHP完美分页类
- vsftpd配置手册(实用)