Java List接口详解

前言

说到List我们都会提到它的顶级结构collection,collection也就是我们经常说到的java集合框架之一,通常我们在面试或平常都会说collection下有list和set接口,但是实际代码是这样的么,我们来看看真实的collection类图

在这里插入图片描述
collection类下的子类其实不少,只不过我们实际工作中经常用到的就是我标红的三种,List,Set,Queue,今天我们的主角就是其中之一的List接口,既然今天要看List,首先我们来看一下List的类图
在这里插入图片描述
List中我们常用的子类有ArrayList,Vector,LinkedList,CopyOnWriteArrayListList是存储有序的可重复的元素的,且该元素可以是null

接下来我们简单的看看这四种List,给个简单的结果定义

/**
 * 普通数组实现的,线程不安全
 */
static List<String> arrayList = new ArrayList<String>();
/**
 * 双向链表实现的,线程不安全
 */
static List<String> linkedList = new LinkedList<String>();
/**
 * 普通数组实现的,线程安全,方法级别的synchronized锁
 */
static List<String> vector = new Vector<String>();
/**
 * 普通数组实现的,线程安全,方法内部ReentrantLock锁
 */
static List<String> copyOnWriteArrayList = new CopyOnWriteArrayList<String>();

关于线程不安全,大家有兴趣的可以去看看我的另外一篇博客,线程不安全是怎么来的

https://blog.csdn.net/jy317358306/article/details/111598874

ArrayList

ArrayList的类图

首先我们来看看ArrayList,先上ArrayList的类图结构
在这里插入图片描述
从上图我们可以看到,ArrayList的初始长度为10,我们要注意下ArrayList真实结构上的这段注释

/**
 * 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.
 */

这段注释讲了四点:
1.这个Object[] elementData是ArrayList存储元素的数组缓冲区
2.ArrayList的长度就是这个数组缓冲区的长度
3.任何初始的空的ArrayList的初始时默认的Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA 这个空数组
4.只有当有第一个元素添加的时候才会被扩容至默认的10的长度的数组

ArrayList的构造方法

接下来我们看看初始化方法
在这里插入图片描述
无参构造,直接将默认的空数组赋值给到了elementData
有参构造,根据传入的容量大小来创建数组,有趣的是,这里初始长度为0的时候赋值的不是默认的空数组,而是另外一个空数组

ArrayList的线程的不安全的问题

首先上测试代码:

/**
 * 线程个数
 */
private static final int COUNT = 5000;

/**
 * 普通数组实现的,线程不安全
 */
static List<String> arrayList = new ArrayList<String>();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值