Java集合类中不实现Cloneable和Serializable原因

Posted feizhai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合类中不实现Cloneable和Serializable原因相关的知识,希望对你有一定的参考价值。

 Java集合类中不实现Cloneable和Serializable原因

  

  莫名的被问这么一个问题,也答不上,记录记录,为何Java集合类不实现Cloneable和Serializable接口。

  

  1.Cloneable接口作用是将一个对象的属性值复制给另一个对象,而不是对象的一个引用。

  

  2.Serializable接口作用(这个罗嗦一下)

    2.1序列化的用途

      1.有时候,如果想让一个对象持久的存储下来(存到磁盘),或者是进行远程的对象调用,那就要使用序列化实现这些作用。

      我们必须对所有支持持久化存储的类实现Serializable接口,读取的时候也要进行反序列化。

      2.对于jvm来说,进行持久化的类必须有个标记,就是实现Serializable接口,关联serialVersionUID,这个变量就是在反序列话中

      确定用那个类加载这个对象。

      3.值得主意的是,持久化的数据都是存在在java堆中,static类型的数据存在在方法区中,不能被持久化。如果不想让某个成员变量

      持久化,变量前面用transient关键字

      4.当然序列化的那个serialVersionUID这个还可以进行自定义

 

  3.回到本贴的主题,为什么集合类中不实现上面两个接口呢

    其实不难看出,Cloneable是复制对象的,序列化也是针对对象的操作,集合类只是管理对象的一个工具,就好比说list能够线性的管理对象,

    set集合能够对对象去重等,这些集合类都是针对与为管理对象而产生的。

    其实,着两个接口都是针对真是的对象,而不是集合类这样的管理对象的对象。这个从语义上就是集合类的Cloneable接口和Serializable接口

    应该又集合中具体的类型实现,而不是又集合类来实现序列化。

    假设集合类实现了这两个接口,如果我要生成一个不需要序列化,不需要clone的集合,那么集合类就强行实现,这样有违集合的设计原则。

 

 

参考:https://blog.csdn.net/leixingbang1989/article/details/50556966

参考:https://blog.csdn.net/liu_shi_jun/article/details/76461517

 

    

以上是关于Java集合类中不实现Cloneable和Serializable原因的主要内容,如果未能解决你的问题,请参考以下文章

Java源码解析——集合框架——ArrayList

java集合Set集合之HashSet详解

Java集合框架----LinkedList源码

Java集合框架----LinkedList源码

ArrayList

Java 接口 Cloneable