首页 > 代码库 > ConcurrentHashMap、HashTable、HashMap的区别
ConcurrentHashMap、HashTable、HashMap的区别
HashTable与ConcurrentHashMap:
相同点:都是线程安全的,可以在多线程的环境下运行。key和value都不能为null
区别:性能上的差异。HashTable每次操作对象都会锁住对象,性能差;而ConcurrentHashMap内部使用Segment数组,每个Segment类似于Hashtable,在操作的时候仅会锁住当前操作的某个Segment对象,其它的线程能够并发执行其它的Segment对象,性能比较好。
HashTable与HashMap:
相同点:都是以键值对存储数据,底层都是“数组-链表”结构。在存储数据的时候,会根据定义的方法通过key计算hash值获取数组下标,如果这个位置没有元素,则直接添加;如果有,则插入到链表的头部
区别:HashTable是线程安全的,性能差;HashMap是线程非安全的,性能好。
ConcurrentHashMap的工作原理:
ConcurrentHashMap在HashMap的基础上,引入了一个“分段锁”的概念,将数据分为多个segment,默认16个(concurrency level),然后每次操作对一个segment加锁,避免多线程锁得几率,提高并发效率(可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中)。
ConcurrentHashMap、HashTable、HashMap的区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。