ArrayList 的使用及原理,面试必问的知识点

点击上方 Java后端,选择 设为星标

优质文章,及时送达


为后面的面试做准备,今天复习一下 ArrayList ,这是必问的知识点 

在开始之前给大家说一下,昨天发布了《今天面试了吗》系列文章第一篇,看来大家分享喜欢此系列,会继续更新。大家可以标星(置顶)本公众号:Java后端,获取后续更新。

ArrayList属于Collection集合类大家族的一员,是分支List中的主力军之一。ArrayList使用非常广泛,无论是在数据库表中查询,还是网络信息爬取都需要使用,所以了解ArrayList的原理就十分重要了(本文中若无特地说明,ArrayList版本基于JDK 1.8)。

ArrayList的继承关系

如何定义一个ArrayList?

ArrayList有三个构造函数:① 无参;②参数为整数;③参数为集合。

举个栗子:

//默认创建一个ArrayList集合
ArrayList<String> a1 = new ArrayList<>();
//创建一个初始长度为12的ArrayList集合
ArrayList<String> a2 = new ArrayList<>(12);
//将其他类型的集合转为ArrayList
ArrayList<String> a3 = new ArrayList<>(new HashSet());

我们读ArrayList构造函数的源码之前,先看看ArrayList的属性的情况:

/**
     * Default initial capacity.
     */
    private static final int DEFAULT_CAPACITY = 10;

    /**
     * Shared empty array instance used for empty instances.
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};

    /**
     * Shared empty array instance used for default sized empty instances. We
     * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
     * first element is added.
     */
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

    /**
     * The array buffer into which the elements of the ArrayList are stored.
     * The capacity of the ArrayList is the length of this array buffer. Any
     * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
     * will be expanded to DEFAULT_CAPACITY when the first element is added.
     */
    transient Object[] elementData; // non-private to simplify nested class access

    /**
     * The size of the ArrayList (the number of elements it contains).
     *
     * @serial
     */
    private int size;

可以看到,ArrayList是非线程安全的容器,底层实现是Object[],数据会添加到ArrayList的elementData数组中,而且默认容量DEFAULT_CAPACITY为10。但其实从jdk7之后,ArrayList的默认容量就是0了,而DEFAULT_CAPACITY在扩容的过程中才会用到。

接下来我们来看看定义ArrayList的三种构造函数。

ArrayList有参构造函数——入参类型为整型
public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Ille
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值