arraylist 初始化_ArrayList一点通

本文详细介绍了ArrayList,包括其继承关系、基本属性、构造方法、扩容机制、添加、删除、查找方法,以及线程安全和序列化特性。ArrayList是基于动态数组实现的,提供快速随机访问,但插入和移除性能较差。在多线程环境下,需要额外的同步措施以确保安全。
摘要由CSDN通过智能技术生成

ArratList从入门到入土

基本介绍

继承图

要想了解一个类,首先先看一下其的继承关系:

8cc16d867adbc5b9ec7cf0c8fcb0505b.png
ArrayList继承图
概述

    ArrayList实现了List接口,是顺序容器,即元素存放的的顺序与放进去的顺序相同;允许放入null元素和元素重复。

    底层通过数组实现,未实现同步。

  • 随机访问速度快,插入和移除性能较差

  • 数组大小灵活调整

  • ArrayList是基于动态数组实现的,在增删时候,需要数组的拷贝复制

  • ArrayList的默认初始化容量是10.每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍

  • 删除元素时不会减少容量,若希望减少容量则调用trimToSize()

  • 使用iterator遍历可能会引发多线程异常

ArrayList<String> alist = new ArrayList<String>();

    由于ArrayList实现了List接口,所以alist变量的类型可以是list类型;new关键字声明后的尖括号中也可以不用再指定元素的类型。

    由于实现了RandomoAccess接口,即提供了随机访问的功能。我们可以通过元素的需要快速获得元素对象。

    由于实现了Cloneable接口,即覆盖了函数clone()能被克隆

    由于实现了Serializable接口,意味着支持序列化,能通过序列化去传输数据

基本属性

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable {  
    // 序列化id  
    private static final long serialVersionUID = 8683452581122892189L;  
    // 默认初始的容量  
    private static final int DEFAULT_CAPACITY = 10;  
    // 一个空对象(为什么是new Object[0]呢?)
    //用Object[0]来代替null 很多时候我们需要传递参数的类型,而不是传null,所以用Object[0]
    private static final Object[] EMPTY_ELEMENTDATA = new Object[0];  
    // 一个空对象,如果使用默认构造函数创建,则默认对象内容默认是该值  
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = new Object[0];  
    // 当前数据对象存放地方,当前对象不参与序列化(主要是关键字transient起作用的)  
    transient Object[] elementData;  
    // 当前数组长度  
    private int size;  
    // 数组最大长度  
    private static final int MAX_ARRAY_SIZE = 2147483639;  
}

方法

构造方法
无参构造方法
 public ArrayList() {
    
        // 创建一个空对象
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
传入容量的构造

当传入的是0的时候调用EMPTY_ELEMENTDATA

当传入的大于0就新建一个数组存储元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值