【问题标题】:Why Concurrent HashMap is Serializable为什么并发 HashMap 是可序列化的
【发布时间】:2015-08-12 05:57:16
【问题描述】:

我正在浏览并发hashmap的源代码,发现它是可序列化的。 HashMap 也是可序列化的。

为什么并发 hashmap/hashmap 是可序列化的?我的意思是为什么做出这种设计选择。

【问题讨论】:

标签: java serialization concurrency concurrenthashmap


【解决方案1】:

HashMap是可序列化的,类实现Serializable接口

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {

private static final long serialVersionUID = 362498820763181265L;

同样是ConcurrentHashMap:

public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable {
private static final long serialVersionUID = 7249069246763182397L;

您可以在以下链接中获得有关 java 序列化的更多详细信息

http://www.tutorialspoint.com/java/java_serialization.htm

【讨论】:

  • 我认为 OP 想知道它为什么要实现 Serializable 接口,为什么做出这样的设计选择。
  • 我们可能无法为您的查询找到满意的答案。但是除了 $WriteThroughEntry 之外,我没有看到 HashMap 和 ConcurrentHashMap Serializaiton 过程之间有太大区别。一些有趣的事实:javaworld.com/article/2073605/…
  • 是的,我想知道为什么它实现了Serializable接口。
【解决方案2】:

正如其他人已经说过的,HashMapSerializable,但是 Map 或 Collection 接口并不强制每个集合的实现都是“可序列化的”。如果您想创建自己的SetMap 并且不将其设置为可序列化,这是您的选择,强迫人们这样做是没有意义的。

但我的猜测是,大多数实用程序类,如 Collection 实现都是可序列化的,因此每个人都不必创建自己的 SerializableHashMap,因为这些类被大量使用并且很多人序列化它们。所以这对他们来说是一个基本的功能。

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2023-01-14
    • 2011-10-29
    • 1970-01-01
    • 2012-02-27
    • 2015-04-16
    • 2012-12-05
    • 2015-12-23
    相关资源
    最近更新 更多