一、认识ArrayList集合。
- ArrayList集合属于Collection集合的体系,我们先来认识一下Collection集合的体系。
- Collection集合是List集合、Set集合的父类。根据下图所示,我们可以清楚的知道这三个集合都是接口。
- List集合下面有ArrayList集合、LinekdList集合两个子类,而Set集合下面也有HashSet集合、TreeSet集合两个子类,并且HashSet集合下面还有一个LinekdHashSet集合的子类。这些子类都是属于实现类,最终都是通过继承Collection集合。如下图所示:
- Collection集合是一种单列集合,每个元素(数据)只包含一个值。现在来看一下Collection集合的特点。
二、ArrayList集合的底层原理。
- ArrayList集合是基于数组实现的。数组的特点是查询快、增删慢。
- 现在看一下ArrayList集合底层实现的过程。
①利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组。
· 如下图所示,通过Debug模式调试可以发现。刚开始创建集合时,集合里面是什么都没有
的。
②添加第一个元素时,底层会创建一个新的长度为10的数组。
· 当开始添加第一个元素时,长度发生了变化,并且在底层会创建一个长度为10的数组。
③存满时,会扩容1.5倍。
· 仔细观察下面两幅图,图一是刚存满10个元素,数组长度还没开始发生变化。当开始存进第
11个元素,数组自动扩容1.5倍,也就是10 x 1.5 = 15 ,数组长度就变成了15。
图一
图二
④如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准。
· 如图一所示,当我在它已经满了,一次性存储10个元素,它将不会按照1.5倍来自动扩容,而
是按照实际长度来扩容。
图一
图二
以上的内容就是ArrayList集合的底层原理,也是我对ArrayList集合的一点理解,若有更好的理解,可评论区告诉我,或者私信我,让我接着学习学习。感觉对自己有帮助可点个赞,收藏起来慢慢学习,后续会慢慢的分享我对一些知识的理解。