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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© null_null_null 中级黑马   /  2019-9-26 16:49  /  1065 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

相同点:
二者都是基于哈希表(也称为哈希数组)+链表实现的,每个元素都是key-value键值对。
内部都是通过单链表解决冲突问题(不同的key映射到同一个哈希表的同一个位置),容量都会自增长。
都实现了Serializable接口,Cloneable接口。
负载因子都为0.75f,都有四个构造方法。
不同点:
Hashtable是线程安全的,HashMap是线程不安全的。
Hashtable默认容量大小是11,HashMap默认容量大小是16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
Hashtable中key和value都不允许为null,而HashMap中key和value都允许为null。Hashtable中put(null,null)编译可以通过,运行报空指针异常。
Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
Hashtable计算hash值,直接用key的hashCode(),而HashMap重新计算了key的hash值,Hashtable在求hash值对应的位置索引时,用取模运算,而HashMap在求位置索引时,则用与运算,且这里一般先用hash&0x7FFFFFFF后,再对length取模,&0x7FFFFFFF的目的是为了将负的hash值转化为正值,因为hash值有可能为负数,而&0x7FFFFFFF后,只有符号外改变,而后面的位都不变。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马