JAVA知识点-弃用Hashtable的原因

本文最后更新于:May 10, 2022 am

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

首先需要注意的是:不是HashTable,而是Hashtable!!! 注意大小写区分。

命名原因

不符合驼峰命名规则。

Hashtable 是在 Java 1.0 的时候创建的,而集合的统一规范命名是在后来的 Java 2 开始约定的,当时其他一部分集合类的发布构成了新的集合框架。至于为什么不在后面的 JDK 版本中修复它呢?可能是为了考虑兼容使用 JDK 老版本的系统吧。所以就将错就错封存在了 JDK,直到现在 JDK 11 了也还没有修复或者考虑删除它。

继承的父类

HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。Dictionary类是一个已经被废弃的类(见其源码中的注释)。父类都被废弃,自然而然也没人用它的子类Hashtable了。

效率问题

HashMap是非线程安全的,Hashtable是线程安全的。

在单线程中,无需做线程控制,HashMap运行效率更高;在多线程中,synchronized会造成线程饥饿,死锁,可以用concurrentHashMap替代。