集合知识储备

一.HashMap VS Hashtable

1.HashMap 是非线程安全的,Hashtable 是线程安全的;
2.HashMap 是能接受null 键值对的 默认null键 哈希值是0,Hashtable不能接受空键值对;
3.HashMap 的迭代器是(fail-fast)迭代器, Hashtable是fail-safe迭代器;
4.HashMap 在java5提共了ConcurrentHashMap,是安全的HashMap 也是 Hashtable的替代品,具有更好的扩展性, java5以下首选Hashtable;
备注:
HashMap可以通过下面的语句进行同步:Map m = Collections.synchronizeMap(hashMap);
fail-fast:直接在容器上进行遍历,在遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException异常导致遍历失败。
fail-safe:这种遍历基于容器的一个克隆。因此,对容器内容的修改不影响遍历。
5.ConcurrentHashMap

1.ConcurrentHashMap是使用了锁分段技术来保证线程安全的。(将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问)
2.ConcurrentHashMap提供了与Hashtable和SynchronizedMap不同的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。
3.ConcurrentHashMap默认将hash表分为16个桶,诸如get、put、remove等常用操作只锁住当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 9,874评论 1 14
  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 5,937评论 0 47
  • ArrayList实现原理要点概括 参考文献:http://zhangshixi.iteye.com/blog/6...
    晨光光阅读 4,728评论 0 1
  • 金属拉丝表面有着很多的细小的痕迹,不科学地讲这些细小的表面痕迹会将光线分成好几类。毛发着色器也有着类似的效果。各向...
    BLENDER阅读 6,818评论 0 0
  • ​ 01. 几个月前,我和许颜站在一片蓝色的荧光之中,台上的阿信,在唱着《你不是真正的快乐》。本来在跟着音乐有节晃...
    大米饭和馒头阅读 3,294评论 5 7