为什么要用HashMap而不用HashTable

遗失蓝鲸 发布于 2016/09/07 09:48
阅读 1K+
收藏 1
如题所示,我测中发现这两个的性能都差不多的,为什么要使用HashMap呢?而在什么情况下应该使用 HashTable 呢
加载中
2
GestureWei
GestureWei
不需要线程安全的场景,建议使用HashMap,需要线程安全的场景,建议使用ConcurrentHashMap;这是java文档里面的建议
1
爱吃荷包蛋i
爱吃荷包蛋i
注意是Hashtable而不是HashTable,从命名上就知道这是一个古老的类。可以使用,但是就算在多线程条件下也建议使用CurrentHashMap,或者使用Collections包的方法来包裹HashMap。
0
游客
游客
Hashtable是同步的,在执行get,put,remove,size,clear等一次性读写操作时,使用了同步机制,避免了多个线程同时读写Hashtable。但同步机制并不能避免在iterator或Enumeration遍历过程中其他线程对Hashtable的put、 remove、clear操作,这些写操作都会被毫无阻拦得成功执行。
0
遗失蓝鲸
遗失蓝鲸

引用来自“游客”的评论

Hashtable是同步的,在执行get,put,remove,size,clear等一次性读写操作时,使用了同步机制,避免了多个线程同时读写Hashtable。但同步机制并不能避免在iterator或Enumeration遍历过程中其他线程对Hashtable的put、 remove、clear操作,这些写操作都会被毫无阻拦得成功执行。
那就是说,对于这种同步,其作用是不大的,那是不是,开发中都不要使用 HashTable了呢
游客
游客
看具体需求啊
0
Jack_Q
Jack_Q
 hashtable有synchronized注定有锁切换的上下文的开销,所以hashmap在不关注线程安全的场景上性能会好点也推荐使用。
0
魔力猫
魔力猫
很多这种说法都是早期一直流传下来的。实际上后来已经没意义了。
魔力猫
魔力猫
回复 @我是来这里找女朋友的 : Java早期不成熟留下的锅。早期线程锁的开销很大,性能堪忧,而且很多时候线程安全并不是必须要求。所以Java的集合框架发展过程中,这些老结构就渐渐被抛弃了,仅仅作为API兼容存在。
遗失蓝鲸
遗失蓝鲸
那是什么原因不使用Hashtable了呢
返回顶部
顶部