`
jianchen
  • 浏览: 344819 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ArrayList的克隆问题

阅读更多
ArrayList<String>   ls   =   new   ArrayList<String>();   //   xx为自定义类  
  ...  
   
  ArrayList<String>   clone   =   (ArrayList<String>)ls.clone();  
  //   此语句报如下Warning  
   

 

 Type   Safety:   The   cast   from   ArrayList   to   ArrayList<xx>   is   actually   checking   against   the   erased   type   ArrayList.


type   safety:   erased   type   Type   safety:   The   cast   from   Object   to   ArrayList<String>   is   actually   checking   against   the   erased   type   ArrayList. 
  The   compiler   is   warning   you   that   the   cast   you   are   doing   is   only   ensuring   the   Object   is   an   ArrayList.   It   can't   tell   if   it   truly   is   an   ArrayList<String>.   If   it   isn't,   on   your   head   be   it.   If   it   is   not   really   an   ArrayList<   String>   expect   a   ClassCastException   as   soon   
  as   you   do   a   get,   even   though   there   are   no   explicit   casts   near   the   get   in   your   code.   The   problem   in   essense   is   that   serialised   objects   contain   no   record   of   their   generic   type.   Many   think   that   design   decision   was   a   big   mistake

 

 

ArrayList的clone()方法如何不能自动克隆ArrayList包含的每一个对象——原有ArrayList和克隆后的ArrayList是相同对象的别名。

这种情况通常叫做浅拷贝,因为它仅仅复制一个对象的“表面”部分。实际的对象由这个“表面”,引用指向的所有对象,以及那些对象指向的所有对象等构成。这往往被称作“对象网络”。如果你拷贝所有这些内容,则被称为深拷贝。

分享到:
评论

相关推荐

    java关键字ArrayList详解

    Cloneable接口表明ArrayList的对象可以被克隆,而Serializable接口则意味着ArrayList可以进行序列化,以便在网络间或磁盘上进行数据传输和持久化。 字段属性: ArrayList内部使用一个Object类型的数组elementData来...

    ArrayList底层原理

    ArrayList是Java编程语言中常用的集合类之一,它实现了List接口,并且其底层数据结构基于数组。...同时,掌握ArrayList的序列化和克隆机制也有助于在项目开发中实现更灵活的数据持久化和对象复制。

    ArrayList共4页.pdf.zip

    ArrayList类继承自AbstractList接口,并实现了Serializable和Cloneable接口,这使得ArrayList对象可以进行序列化和克隆。 ArrayList的核心特点是其内部维护了一个Object类型的数组,用于存储元素。由于基于数组,...

    ArrayList源码分析_016.pdf

    此外,ArrayList还实现了Cloneable和Serializable接口,这意味着ArrayList的对象可以被克隆和序列化。 ArrayList的属性定义包括一个transient的Object数组`elementData`,用于存储列表中的元素,以及一个整型变量`...

    List集合之ArrayList

    这意味着原始ArrayList和克隆对象之间的元素仍然是共享的,如果元素是不可变的,这通常不是问题;但对于可变元素,改变克隆对象的元素也可能影响原始对象。 3. **Serializable接口**:实现Serializable接口的类可以...

    ArrayList底层.pdf

    4. **`Cloneable`**:表明该类支持浅克隆。 5. **`Serializable`**:使对象能够被序列化。 ### 二、重要字段 #### 1. `serialVersionUID` 序列化版本ID,用于序列化兼容性的控制。 ```java private static final...

    ArrayList详解和使用示例_动力节点Java学院整理

    ArrayList还继承于Serializable,实现了克隆和序列化功能。 ArrayList的构造函数 ArrayList有多种构造函数,包括: * 默认构造函数ArrayList():创建一个默认容量的ArrayList。 * ArrayList(int capacity):创建...

    JAVA ArrayList详细介绍(示例)

    ArrayList还实现了Cloneable和Serializable接口,支持克隆和序列化操作。 7. **性能比较** - **ArrayList vs 数组**:ArrayList在插入和删除元素(尤其是中间位置)时性能较低,因为需要移动大量元素。而数组的...

    java 对象克隆

    cloned.myList = new ArrayList(this.myList); // 深拷贝列表 return cloned; } } ``` 三、深克隆实现 实现深克隆通常需要递归地遍历对象的所有属性,包括嵌套的对象和集合。对于复杂的对象结构,可以使用序列化...

    Java源码篇之容器类——ArrayList

    此外,ArrayList还实现了Cloneable接口,支持克隆操作。 3、ArrayList的源码 - **类的属性** ArrayList内部使用一个Object类型的数组`elementData`来存储元素。初始容量为10,当数组容量不足时,会通过`...

    Java进阶--深入理解ArrayList实现原理

    这意味着ArrayList提供了顺序访问和随机访问的高效性,支持克隆和序列化,同时也意味着其内部数据是以数组的形式存储。 **构造方法** ArrayList有多种构造方式,包括无参构造器、带初始容量参数的构造器以及接受一...

    java代码-使用集合ArrayList对字符串进行存储和管理

    ArrayList的克隆是浅拷贝,这意味着新ArrayList和原ArrayList共享相同的对象引用。如果需要深拷贝,可以使用`clone()`和`toArray()`结合: ```java ArrayList&lt;String&gt; clonedList = new ArrayList(Arrays.asList...

    MultiSpinnerSelect:具有ArrayList的MultiSpinnerSelect

    压缩包子文件的文件名称列表"MultiSpinnerSelect-master"可能是一个Git仓库的主分支名称,通常在克隆或下载开源项目时,会以这种形式命名解压后的文件夹,其中包含了项目的源代码、资源文件、构建脚本等。...

    JAVA链表的介绍(包含单项链表、双向链表)、LinkedList 与 ArrayList 比较、链表的基本操作、基本方法等

    - 支持克隆(`Cloneable`)和序列化(`Serializable`)。 - 位于`java.util`包中。 #### 四、基本操作示例 下面通过几个示例来演示如何使用`LinkedList`进行基本操作: 1. **创建LinkedList**: ```java import ...

    2023版Java面试题.pdf

    1. ArrayList 和 LinkedList 的区别:ArrayList 是基于数组实现的,而 LinkedList 是基于链表实现的。 2. Vector 和 ArrayList 的区别:Vector 是线程安全的,而 ArrayList 是线程不安全的。 3. Array 和 ArrayList ...

    java对象复制

    此外,提到的`ArrayList`和`HashMap`是非同步的,这意味着它们在多线程环境下可能存在并发修改的问题,可能导致数据不一致。相反,`Vector`和`Hashtable`是线程安全的,它们的每个操作都是同步的,但这通常会导致...

    第11-13章编程题的小提示1

    这里我们将深入探讨两个关键知识点:对象克隆和迭代器。 首先,让我们聚焦于对象克隆。在Java中,克隆是用于创建一个已有对象的副本,通常用于数据备份或分离对象的状态。在描述中提到的编程题第2题,涉及到在有...

Global site tag (gtag.js) - Google Analytics