1. HashTable是做了同步的,HashMap未考虑同步。所以HashMap在单线程情况下效率较高;HashTable在的多线程情况下,同步操作能保证程序执行的正确性。
  2. HashMap是非线程安全的,HashTable是线程安全的。因为HashTable是做了同步的,HashMap未考虑同步。HashMap是非线程安全的,解释:当有多个线程在运行程序的时候,有一个线程对HashMap进行循环get,突然有一个线程对HashMap插入或者删除等操作,就会抛出异常。
  3. HashMap的键值对都允许有null存在,而HashTable则都不行,如果HashTable中的键值只要有一个null,直接抛出NullPointerException。ConcurrentHashMap也是键值都不允许有一个null。
  4. 由于同步、哈希性能等原因,性能肯定是HashMap更佳,因此HashTable已被淘汰。
  5. 默认初始化数组的大小不同,HashMap默认初始化数组的大小为16,HashTable为11。前者扩容时乘2,使用位运算取得哈希,效率高于取模。而后者为乘2加1,都是素数和奇数,这样取模哈希结果更均匀。
  6. 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

最新文章

  1. windows远程连接Linux(Ubuntu)的方法
  2. 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
  3. ios-UIWebView中js和oc代码的互调
  4. VS2010远程调试
  5. C# this关键字详解
  6. BZOJ 3901 棋盘游戏 解题报告
  7. 安装java memcached client到本地maven repository
  8. Android(java)学习笔记243:多媒体之视频播放器
  9. Spring MVC 如何防止XSS、SQL注入攻击
  10. 基于jQuery的上下无缝滚动应用(单行或多行)
  11. HDU4734(数位dp)
  12. Vuthink正确安装过程
  13. java.lang.IllegalArgumentException: Document base E:\Eclipse\workspace\.metadata\.plugins\org.eclips
  14. 源码安装xadmin及使用
  15. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页
  16. 当你想要在conda指定的某个环境中安装包的方法
  17. MySQL数值类型
  18. Borg Maze POJ - 3026 (BFS + 最小生成树)
  19. PHP完美分页类
  20. vsftpd配置手册(实用)

热门文章

  1. luogu P1762 偶数
  2. PWA,SPA,MPA
  3. JDK7与8内存参数解析与修改
  4. Java并发编程--并发容器之Collections
  5. QT中QString 与 int float double 等类型的相互转换
  6. Kaggle Titanic补充篇
  7. 关于python中的module
  8. 腾讯云YUM安装失效
  9. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
  10. Linux系统编程【转】