开发者社区> 问答> 正文

JAVA中HashMap 和 HashTable 有何不同?

JAVA中HashMap 和 HashTable 有何不同?

展开
收起
vncamyi27xznk 2021-11-13 22:53:45 352 0
1 条回答
写回答
取消 提交回答
  • " 线程安全:HashTable 中的方法是同步的,而 HashMap 中的方法在默认情况下是非同步的。在多线程并发的环境下,可以直接使用 HashTable,但是要使用 HashMap 的话就要自己增加同步处理了。 继承关系: HashTable 是基于陈旧的 Dictionary 类继承来的。 HashMap 继承的抽象类 AbstractMap 实现了 Map 接口。 允不允许 null 值: HashTable 中,key 和 value 都不允许出现 null 值,否则会抛出 NullPointerException 异常。 HashMap 中,null 可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为 null。 默认初始容量和扩容机制: HashTable 中的 hash 数组初始大小是 11,增加的方式是 old*2+1。HashMap 中 hash 数组的默认大小是 16,而且一定是 2 的指数。原因参考全网把 Map 中的 hash()分析的最透彻的文章,别无二家。-HollisChuang's Blog。 哈希值的使用不同 : HashTable 直接使用对象的 hashCode。 HashMap 重新计 算 hash 值。 遍历方式的内部实现上不同 : Hashtable、HashMap 都使用了 Iterator。而由于历史原因,Hashtable 还使用了 Enumeration 的方式 。 HashMap 实现 Iterator,支持 fast-fail,Hashtable 的 Iterator 遍历支持 fast-fail,用 Enumeration 不支持 fast -fail。

    资料来源:《Java工程师成神之路(基础篇)》,链接:https://developer.aliyun.com/topic/download?id=923"

    2021-11-16 13:02:15
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载