文档章节

HashMap是线程安全的吗?为什么?那些是线程安全的容器?以及HashMap与HashTable的区别?

五六柒
 五六柒
发布于 07/08 16:39
字数 470
阅读 12
收藏 0
  • HashMap 不是线程安全的。
  • HashMap 做 put 操作时,两个线程同时进入 addEntry 操作,计算出相同的 hash 值,A线程写入头节点之后,B线程也写入头节点,那么A的操作就会被覆盖,造成A的写入操作丢失。
  • Vector 和 HashTable,concurrentHashMap,copyOnwriteArrayList时线程安全的。

  1. 继承不同。HashMap 是继承自 AbstractMap 类,而 HashTable 是继承自 Dictionary 类。
  2. HashTable 中的方法是同步的,HashMap 是非同步的。HashTable 的实现方法里面都添加了 synchronized 关键字来确保同步,使用HashMap的话就要自己增加同步处理。同步方法 Map m = Collections.synchronizeMap(hashMap);
  3. HashTable 中,K,V都不允许出现null;HashMap中,null 可以作为键,这样的键只有一个,为 null 的值可以有一个或多个。(HashMap中不能用get()来判断是否存在某个键,应该用containsKey() )
  4. 遍历方式。HashMap、HashTable 都使用了 Iterator 。由于历史原因 HashTable 还使用了 Enumeration 的方式。Iterator 的迭代器是 fail-fast 迭代器,而 Enumeration 不是。
  5. hash值的使用不同。HashTable 直接使用对象的 Hashcode,HashMap 重新计算 hash值。
  6. 数组的初始大小和扩容方式不同。HashTable 的数组默认大小是11,扩容方式是 old * 2 + 1。HashMap 中数组默认大小是16,扩容方式是 2 的指数次幂。
  7. 求数组下标方式不同。hashTable 通过除以 length 取余,hashMap是与 length - 1 进行按位与运算。

© 著作权归作者所有

五六柒
粉丝 2
博文 40
码字总数 12034
作品 0
德阳
私信 提问
java容器学习

java容器: 容器,顾名思义,就是用来存放东西的道具,但是在我们程序开发中容器的概念就是用来存在我们数据对象的引用。 往常的数组存储,由于数组开始的长度已经指定,开发过程中不能随意修...

四月李
2015/12/17
156
0
集合——HashMap和Hashtable的区别

HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 HashMap几乎可以等价于Hashtable,除了H...

亚特兰缇斯
2015/03/03
48
0
HashMap和Hashtable的区别

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问...

LCZ777
2014/03/29
96
0
并发容器-map

map区别 ConcurrentHashMap使用(Segment[分片])锁机制。每个段其实就是一个小的,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。同样当一个线程占用锁访问其中一个...

sunny_92
2017/08/22
0
0
【JAVA学习】——hashmap和hashtable的区别

HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 1、HashMap几乎可以等价于Hashtable,除了...

fjj15732621696
2017/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部