前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ArrayList底层结构和源码分析

ArrayList底层结构和源码分析

原创
作者头像
兮动人
发布2023-01-23 11:41:08
2690
发布2023-01-23 11:41:08
举报
文章被收录于专栏:兮动人的博客兮动人的博客

1. ArrayList 的注意事项

1) permits all elements, including null , ArrayList可以加入null,并且多个。

代码语言:java
复制
	ArrayList arrayList = new ArrayList();
	arrayList.add(null);
	arrayList.add("兮动人");
	arrayList.add(null);
	System.out.println(arrayList);
在这里插入图片描述
在这里插入图片描述

2) ArrayList是由 数组 来实现数据存储的

3) ArrayList基本等同于Vector,除了ArrayList线程不安全(执行效率高)

看源码,如 :add 方法没有 synchronized (同步)修饰。

多线程情况下,不建议使用ArrayList。

代码语言:java
复制
public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
}

2. ArrayList 的底层操作机制源码分析

1) ArrayList中维护了一个Object类型的数组elementData。debug看源码

transient Object[] elementData;transient表示瞬间,短暂的,表示该属性不会被序列化

在这里插入图片描述
在这里插入图片描述

2) 当创建ArrayList对象时,如果使用的是无参构造器,则初始值elementData容量为0,第1次 添加,则扩容elementData10,如需要再次扩容,则扩容elementData1.5倍。

在这里插入图片描述
在这里插入图片描述
  • 无参构造器-扩容
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3) 如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData1.5倍。

  • 指定大小的构造器--扩容
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 建议:去debug一把我们的ArrayList的创建和扩容的流程。
  1. debug 查看 ArrayList 源码分析
代码语言:java
复制
	//使用无参构造器创建 ArrayList 对象
	//ArrayList list = new ArrayList();
	ArrayList list = new ArrayList(8);
	//使用 for 给 list 集合添加 1-10 数据
	for (int i = 1; i <= 10; i++) {
	list.add(i);
	}
	//使用 for 给 list 集合添加 11-15 数据
	for (int i = 11; i <= 15; i++) {
	list.add(i);
	}
	list.add(100);
	list.add(200);
	list.add(null);
  • 注意:Idea 默认情况下,Debug 显示的数据是简化后的,如果希望看到完整的数据,需要设置如下
    在这里插入图片描述
    在这里插入图片描述
  • ArrayList 无参构造分析:
  • 可以看到 ArrayList 第一次初始化后的 elementData 是个空数组
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • ArrayList 有参分析
    在这里插入图片描述
    在这里插入图片描述

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. ArrayList 的注意事项
  • 2. ArrayList 的底层操作机制源码分析
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档