线程安全: HashMap 是非线程安全的,而 Hashtable 是线程安全的,因为 Hashtable 内部的方法,基本都经过 synchronized 修饰(如果要确保线程安全,建议使用 ConcurrentHashMap );
执行效率: 因为线程安全的原因,HashMap 要比 Hashtable 效率高;此外,由于 Hashtable 基本被淘汰,最好不要在项目中使用它;
对 Null key 和 Null value 的支持: HashMap 中,null 可以作为键,这样的键最多可以有一个,但可以有一个或多个键所对应的值为 null;在 Hashtable 中,键和值都不能为 null,否则会直接抛出 NullPointerException;
初始容量大小和扩容的机制不同 :
① 创建时,如果未指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的 2n+1;HashMap 默认的初始大小为16,之后每次扩充,容量变为原来的2倍;
② 创建时,如果给定了容量初始值,Hashtable 将直接使用给定大小作为初始容量;而 HashMap 会将其扩充为2的幂次方大小,也就是说, HashMap 总是使用2的幂作为哈希表的大小;底层数据结构: JDK1.8 以后,HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,会自动将链表转化为红黑树,以减少搜索时间,而 Hashtable 没有这样的机制。
HashMap 和 Hashtable 的区别
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 都是基于哈希表提供键值映射的数据结构 Hashtable是线程安全的,效率比较低,被废弃的其他原因可能是因为Has...
- Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和...