A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ۩大世界小人物 中级黑马   /  2014-5-20 08:21  /  3589 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ۩大世界小人物 于 2014-5-29 11:30 编辑

Hashtable和HashMap的差别?
       我只知道    Hashtable不允许null作为键和值  而HashMap允许
除了这点    个位看官们 还能补充点别的么
      尽量能详细一点。谢谢

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

8 个回复

倒序浏览
Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的,必须实现hashCode和equals方法,jdk1.0,效率低。
HashMap:底层是哈希表数据结构,允许一个null键和多个null值,该集合是不同步的。将hashtable替代,jdk1.2,效率高。也需要实现元素的hashCod和equals方法。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
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算法都大概一样,所以性能不会有很大的差异

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
来学习了,我还没学习到线程那里。看看各位大神的讲解。
回复 使用道具 举报
HashTable:在创建 Iterator 之后,如果从结构上对 Hashtable 进行修改,除非通过 Iterator 自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出ConcurrentModificationException。因此,面对并发的修改,Iterator 很快就会完全失败,而不冒在将来某个不确定的时间发生任意不确定行为的风险。由 Hashtable 的键和元素方法返回的 Enumeration 不 是快速失败的。

HashMap:
如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:

   Map m = Collections.synchronizedMap(new HashMap(...));
回复 使用道具 举报 1 0
赞一个。。。
回复 使用道具 举报
最标准的回答:相同点:都是哈希表结构,都是无序且不可重复的    不同点:前者不允许null值的键和值,而后者允许,前者是同步的,后者不同步
回复 使用道具 举报
谢谢各位的大神
回复 使用道具 举报
java我觉得就是集合那一块难啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马