为什么 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 的较新版本而不用担心修改其现有功能 的应用程序或项目非常有帮助,这些功能使用了一些旧版类(如 Hashtable
、Vector
等)。
向后兼容性
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
据我所知,ConcurrentHashMap 对存储桶进行分区并且在每个分区上有单独的锁。但是 HashTable 对所有桶都有一个 单锁 。
因此,ConcurrentHashMap 可以更高效或(在最坏的情况下)与 HashTable 同等高效。那么为什么 Java 需要保留 HashTable 的最新版本。
HashTable现在不是过时了吗?或者 HashTable 是否还有一些优于 ConcurrentHashMap 的优点?
一个非常简单的原因:可能有无数行代码使用该经典。以及想要使用更新的 JDK 重新编译该代码的人们。
你想把他们都打碎!?
这个概念不仅适用于 Hashtable
,事实上它适用于所有旧版 类,因为 Java 版本应该是二进制向后兼容的。
这对于 想要升级到 Java 的较新版本而不用担心修改其现有功能 的应用程序或项目非常有帮助,这些功能使用了一些旧版类(如 Hashtable
、Vector
等)。
向后兼容性
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