栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

笔记:HashMap与HashTable的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

笔记:HashMap与HashTable的区别

HashMap与HashTable主要有以下几个区别:

    对Null Key和Null Value的支持
    HashMap因为是非synchronized,所以允许key和value为null,但null作为键只能有一个,null作为值可有多个;而HashTable则不允许,否则会抛出NullPointerException异常。线程安全
    HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,原因在于HashTable的put,get,remove方法在源码中被synchronized修饰定义成同步方法,保证了每个操作数据的方法在进行同步控制后,任何一个时刻只能有一个线程操作HashTable;HashMap是线程不安全的,多线程情况下不推荐使用HashMap,它的key,value运行为null。Java 5及以上提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。初始化和扩容方式
    HashTable中hash数组初始化大小及扩容方式不同。Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。继承的父类不同
    HashMap和Hashtable不仅作者不同,而且连父类也是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。底层数据结构
    JDK1.8以后的HashMap在解决hash冲突时有较大改变,当链表长度大于阈值时(默认为8,且转换前会判断当前数组长度若小于64,则先进行数组扩容,而不是转换为红黑树),将链表转换为红黑树,以减少搜索事件。而HashTable则不具有该机制。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732799.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号