数据结构之ArrayList

ArrayList

  • ArrayList详解
    • ArrayList概念
    • ArrayList类
      • Serializable 标记性接口
      • Cloneable 标记性接口
      • RandomAccess 标记性接口
      • AbstractList 抽象类
    • ArrayList源码解析
      • 构造函数
      • add(E e)
      • add(int index, E element)
      • addAll(Collection c)
      • addAll(int index, Collection c)
      • E set(int index, E element)
      • E get(int index)
      • Iterator iterator()
      • list.remove(Object o)
      • iterator.remove()
      • clear()
      • contains(Object o)
      • isEmpty()

ArrayList详解

ArrayList概念

​ ArrayList其实是一个数组,数组是一种线性表数据结构,使用一组连续的内存空间来存储同一种数据类型;特点:

​ 1:增删慢,每次删除元素都要更改数组长度,拷贝和移动元素位置;(为了保证数据的连续性)

​ 2:查询快,可以根据地址+索引的方式快速获取对应位置上的元素;

​ 内存寻址:计算机在分配内存的时候,会给每个内存单元都分配了一个地址,然后通过地址来访问数据;比如new int[5]; 计算机会给数组分配一块连续的内存空间,并且得到这个内存空间的起始位置,比如从0-4;,所以如果要通过地址来访问数据的时候,计算机有一个寻址公式来到得到其地址;

ArrayList类

public class ArrayList extends AbstractList
        implements List, RandomAccess, Cloneable, java.io.Serializable

Serializable 标记性接口

不实现这个类的接口将不会使用任何状态序列化或反序列化,可序列化类的所有子类型都是可以序列化的;

而且这个序列化的接口是没有方法或者字段的,仅仅是标识可串行序列化的语义;

那么序列化有什么作用呢?

序列化:将对象得数据写入到文件(写对象)

反序列化:将对象数据从文件中读取出来

不使用就会无法写入数据,写入到文件中;

Cloneable 标记性接口

克隆就是可以创建一份新的完全一样的数据拷贝,如果不实现这个接口,克隆的时候会出问题;CloneNotSupprotedException

源码分析:clone方法其实调用的native层的clone,(super.Clone)的时候,调用的是object对象的clone方法;

拷贝分为以下两种方式:

浅拷贝:基本数据类型可以达到复制,引用数据类型则不可以;引用类型只会拷贝对象的地址,所以当原对象发生改变的时候,拷贝的对象也会发生改变。

使用浅拷贝的时候,该类需要实现Cloneable接口,并且实现clone()方法;

深拷贝:主类的基本数据类型和引用数据类型都可以进行拷贝,但需要注意的是,主类中的所有引用类型数据需要重写clone方法;然后在主类中修改clone方法,clone

你可能感兴趣的:(Android,数据结构,android)