为什么 HashTable 在 Java 中仍然存在,而 ConcurrentHashMap 比它更高效?

Why Does HashTable still in existence in Java, when ConcurrentHashMap is more efficient than it?

据我所知,ConcurrentHashMap 对存储桶进行分区并且在每个分区上有单独的锁。但是 HashTable 对所有桶都有一个 单锁

因此,ConcurrentHashMap 可以更高效或(在最坏的情况下)与 HashTable 同等高效。那么为什么 Java 需要保留 HashTable 的最新版本。

HashTable现在不是过时了吗?或者 HashTable 是否还有一些优于 ConcurrentHashMap 的优点?

一个非常简单的原因:可能有无数行代码使用该经典。以及想要使用更新的 JDK 重新编译该代码的人们。

你想把他们都打碎!?

这个概念不仅适用于 Hashtable,事实上它适用于所有旧版 类,因为 Java 版本应该是二进制向后兼容的。

这对于 想要升级到 Java 的较新版本而不用担心修改其现有功能 的应用程序或项目非常有帮助,这些功能使用了一些旧版类(如 HashtableVector 等)。

向后兼容性

Java versions are expected to be binary backwards-compatible. For example, JDK 8 can run code compiled by JDK 7 or JDK 6. It is common to see applications leverage this backwards compatibility by using components built by different Java version. A Compatibility Guide (explained later) exists for each major release to provide special mention when something is not backwards compatible.

你可以看看here