ArrayList自学笔记1--介绍、继承关系、部分代码

一、ArrayList集合底层数据结构

1、ArrayList集合介绍

List接口的可调整大小的数组实现

2、数组结构介绍

增删慢:每次删除元素,都要更改数组长度、拷贝以及移动元素位置。

查询快:由于数组在内存中是一块连续空间,因此可以根据地址+索引的方式快速获取对应位置上的元素。

二、ArrayList继承关系

1、Serializable标记性接口

介绍:

类的序列化由实现java.io.Serializable接口的类启用。不实现此接口的类将不会使任何状态序列化或反序列化。可以序列化的类的所有子类都是可序列化的。序列化接口没有方法或字段,仅用于标识可串行化的语义。

序列化:将对象的数据写入到文件;

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

源码:

public interface Serializable{
}

2、Cloneable标记接口

介绍:

一个类实现Cloneable接口来指示Object.clone()方法,该方法对于该类的实例进行字段的复制是合法的。在不实现Cloneable接口的实例上调用对象的克隆方法会导致异常。

源码:

public interface Cloneable{
}

克隆的前提条件:

被克隆对象所在的类必须实现Cloneable接口;

必须重写clone方法;

浅克隆:

只克隆基本变量,对象变量只是共用地址,不克隆。

如:

深克隆:

对象变量的类需要实现浅克隆;

重写clone方法

如:

clone的基本使用:

list.clone();

3、RandomAccess标记接口(ArrayList实现,LinkList没有)

介绍:

标记接口由List实现使用,以表明它们支持快速随机访问

此接口的主要目的是允许通用算法更改其行为,以便在应用于随机访问列表或顺序访问列表时提供良好的性能。

4、AbstractList抽象类

三、方法源码

1、toString方法优化(不是源码)

字符串拼接会产生大量的对象,占用内存,建议使用StringBuilder。

如:

2、clone()源码

调用父类方法

调用copyOf

内部调用System.arraycopy

四、ArrayList与LinkedList的区别

发布了171 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/QilanAllen/article/details/105385294
今日推荐