ArrayList源码解析(jdk1.8)——思路篇(如何看源码)

本文介绍了ArrayList的源码解析思路,包括了解其特性、提出疑问、解读继承与实现、成员变量分析。ArrayList是有序、可存储重复元素的集合,基于数组实现,查询效率高但增删效率低。文章详细讨论了ArrayList的扩容机制,通过1.5倍扩容确保高效,并展示了其增删元素和转换为数组的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:关于ArrayList相信大家都不陌生。而且大多数人应该都点开过它的源码浏览过。不过看到了什么,记住了什么,这是个值得深思的问题。博主今天写这篇文章的重点也不是解析其源码。更多的是想和大家分享一下看源码的一种方法以及一种思路。

源码解析第一步:简单了解其特性

ArrayList特点:

  1. ArrayList是有序的(放入顺序)
  2. ArrayList元素是不唯一的(可存放重复元素)

ArrayList简介:

  1. ArrayList底层是由数组实现的
  2. 他的容量是动态增长的
  3. 操作元素时查询效率高,增删效率低

源码解析第二步:提出自己的疑问,带着问题去读源码

  1. ArrayList是如何实现有序的
  2. ArrayList是如何扩容的
  3. ArrayList为何查询效率高,增删效率低
  4. ArrayList如何转换为数组

源码解析第三步:解读其继承与实现

现在让我们打开其源码,简单的读了读类注释,大体意思就是:它是一个集合框架,它是由数组实现的,它的容量可以自动扩充,它是线程不安全的以及迭代相关的一些说明;还有建议我们去看的一些类@see

/**
 *
 * @author  Josh Bloch
 * @author  Neal Gafter
 * @see     Collection
 * @see     List
 * @see     LinkedList
 * @see     Vector
 * @since   1.2
 */
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
  

我们可以看到他继承了AbstractList抽象类,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。

  • 继承了AbstractList,实现了ListAbstractList是个抽象类,抽象类一般用来提取一些共有的属性。简单看下他有add(),get(),set(),remove()等方法。
  • 实现了RandomAccess接口:点进去看了眼啥也没有!查了下RandomAccess 是一个标志接口,表明实现这个接口的 List 集合是支持快速随机访问的。
  • 实现了Cloneable 接口:点进去看了眼还是啥也没有!查了下实现这个接口
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值