ArrayList原理解析(一)结构解析

本文介绍了ArrayList的结构,详细讲解了其作为RandomAccess、Cloneable和Serializable接口的实现,探讨了浅拷贝与深拷贝的区别,并阐述了为什么ArrayList既要实现AbstractList又需要实现List接口。
摘要由CSDN通过智能技术生成


前言


一、ArrayList结构概览

结构图 :

ArrayList结构图
实现了三个标记接口:RandomAccess, Cloneable,Serializable

代码如下 :

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

关于标记接口的定义:

Java中的标记接口(Marker Interface),又称标签接口(Tag Interface),具体是不包含任何方法的接口。

二、结构说明

1. 接口

1.1 RandomAccess

/**
 * Marker interface used by <tt>List</tt> implementations to indicate that
 * they support fast (generally constant time) random access.
 */
public interface RandomAccess {
   
}

这段话大概的意思就是说 RandomAccess 是一个标志接口,表明实现这个接口的List 集合是支持快速随机访问的。

同时,官网还特意说明了,如果是实现了这个接口的 List,for循环获取数据是比迭代器获取数据更快的

As a rule of thumb, a List implementation should implement this interface if, for typical instances of the class, this loop:
for (int i=0, n=list.size(); i < n; i++)
list.get(i);
runs faster than this loop:
for (Iterator i=list.iterator(); i.hasNext(); )
i.next();

1.2 Cloneable

支持拷贝:实现Cloneable接口,重写clone方法、方法内容默认调用父类的clone方法。

1.2.1 浅拷贝
  1. 基础类型的变量拷贝之后是独立的,不会随着源变量变动而变
  2. String类型拷贝之后也是独立的
  3. 引用类型拷贝的是引用地址,拷贝前后的变量引用同一个堆中的对象
    public static void main(String[] args) {
   
        ArrayList<String> list = new ArrayList();
        list.add("100");
        list.add("200");
        ArrayList<String> cloneList = (ArrayList<String>)list.clone();
        cloneList.remove(0);
        System.out.println(list);
        System.out.println(cloneList)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值