HashMap HashTable和Conpresent和current区别HashMap的区别

下次自动登录
现在的位置:
& 综合 & 正文
HashMap和Hashtable和HashTree和ConcurrentMap的区别
1.HashMap不是线程安全
HashMap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。
2.HashTable是线程安全的一个Collection。
  HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。  HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash都大概一样,所以性能不会有很大的差异。
3.TreeMap和TreeSet一样数据都是有序的使用二叉树排序,而HashMap数据是无序的。TreeMap是基于红黑树(见注释)实现,HashMap是基于哈希表实现。HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
4.ConcurrentMap 表现区别:不可以有null键,线程安全,原子操作。一个ConcurrentHashMap 由多个segment 组成,每个segment 包含一个Entity 的数组。这里比HashMap 多了一个segment 类。该类继承了ReentrantLock 类,所以本身是一个锁。当多线程对ConcurrentHashMap 操作时,不是完全锁住map, 而是锁住相应的segment 。这样提高了并发效率。缺点:当遍历ConcurrentMap中的元素时,需要获取所有的segment 的锁,使用遍历时慢。锁的增多,占用了系统的资源。使得对整个集合进行操作的一些方法(例如 size() 或 isEmpty() )的实现更加困难,因为这些方法要求一次获得许多的锁,并且还存在返回不正确的结果的风险。
注:红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种,典型的用途是实现。 它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
&&&&推荐文章:
【上篇】【下篇】1587人阅读
Java基础(22)
1.HashMap不是线程安全
& &&HashMap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。
2.HashTable是线程安全的一个Collection。
  HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。  HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。&Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。&Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
3.TreeMap和TreeSet一样数据都是有序的使用二叉树排序,而HashMap数据是无序的。TreeMap是基于红黑树(见注释)实现,HashMap是基于哈希表实现。HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
4.ConcurrentMap 表现区别:不可以有null键,线程安全,原子操作。一个ConcurrentHashMap 由多个segment 组成,每个segment 包含一个Entity 的数组。这里比HashMap 多了一个segment 类。该类继承了ReentrantLock 类,所以本身是一个锁。当多线程对ConcurrentHashMap 操作时,不是完全锁住map, 而是锁住相应的segment 。这样提高了并发效率。缺点:当遍历ConcurrentMap中的元素时,需要获取所有的segment 的锁,使用遍历时慢。锁的增多,占用了系统的资源。使得对整个集合进行操作的一些方法(例如&size()&或&isEmpty()&)的实现更加困难,因为这些方法要求一次获得许多的锁,并且还存在返回不正确的结果的风险。
注:红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种,典型的用途是实现。 它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:102137次
积分:2096
积分:2096
排名:第18823名
原创:120篇
(1)(1)(5)(1)(1)(2)(1)(1)(1)(1)(1)(1)(1)(1)(1)(7)(101)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'HashMap和HashTable的区别详解
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了java
HashMap和HashTable的区别详解的相关资料,需要的朋友可以参考下
& HashMap和HashTable,这二者的区别经常被别人问起,今天在此总结一下。
(一)继承的历史不同
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
&&& Hashtable是继承自Dictionary类的,而HashMap则是Java 1.2引进的Map接口的一个实现。
(二)安全性不同
&&& HashMap是非synchronized,而HashTable在默认的情况下是synchronized,这意味着HashTable是线程安全的,多个线程可以共享一个HashTable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5以后提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。当然,我们可以通过以下方法让HashMap同步:
Map m = Collections.synchronizeMap(hashMap);
(三)是否可为空值的异同
&&& HashMap可以让你将空值作为一个表条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null;而HashTable则不行,key和value都不允许出现null值。
(四)二者的遍历方式的内部实现上不同
&&& Hashtable、HashMap都使用了 Iterator迭代器,HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast的。而由于历史原因,Hashtable还使用了Enumeration的方式 。
(五)哈希值的使用不同
&&& HashTable直接使用对象的hashCode,而HashMap则需要重新计算hash值。
(六)二者内部实现方式的数组的初始大小和扩容的方式不同
&&& HashTable中hash数组默认大小是11,增加的方式是 old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具2009年6月 Java大版内专家分月排行榜第三
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2009年5月 Java大版内专家分月排行榜第三
2011年2月 移动平台大版内专家分月排行榜第三2011年1月 移动平台大版内专家分月排行榜第三2010年10月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 present和current区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信