黑马程序员技术交流社区
标题:
关于集合框架Map
[打印本页]
作者:
۩大世界小人物
时间:
2014-5-20 08:21
标题:
关于集合框架Map
本帖最后由 ۩大世界小人物 于 2014-5-29 11:30 编辑
Hashtable和HashMap的差别?
我只知道 Hashtable不允许null作为键和值 而HashMap允许
除了这点 个位看官们 还能补充点别的么
尽量能详细一点。谢谢
作者:
gentleman
时间:
2014-5-20 10:41
Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的,必须实现hashCode和equals方法,jdk1.0,效率低。
HashMap:底层是哈希表数据结构,允许一个null键和多个null值,该集合是不同步的。将hashtable替代,jdk1.2,效率高。也需要实现元素的hashCod和equals方法。
作者:
欧阳疯
时间:
2014-5-20 10:50
1 HashMap不是线程安全的
hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。
2 HashTable是线程安全的一个Collection。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异
作者:
ID1003
时间:
2014-5-21 00:38
来学习了,我还没学习到线程那里。看看各位大神的讲解。
作者:
艮昕辶
时间:
2014-5-21 15:55
HashTable:在创建 Iterator 之后,如果从结构上对 Hashtable 进行修改,除非通过 Iterator 自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出ConcurrentModificationException。因此,面对并发的修改,Iterator 很快就会完全失败,而不冒在将来某个不确定的时间发生任意不确定行为的风险。由 Hashtable 的键和元素方法返回的 Enumeration 不 是快速失败的。
HashMap:
如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:
Map m = Collections.synchronizedMap(new HashMap(...));
作者:
钟翠翠
时间:
2014-7-21 14:03
赞一个。。。
作者:
Geek_001
时间:
2014-7-23 00:21
最标准的回答:相同点:都是哈希表结构,都是无序且不可重复的 不同点:前者不允许null值的键和值,而后者允许,前者是同步的,后者不同步
作者:
含着泪微笑
时间:
2014-11-4 20:47
谢谢各位的大神
作者:
alan2016
时间:
2016-4-21 09:40
java我觉得就是集合那一块难啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2