ArrayList 子类| 学习笔记

开发者学堂课程【Java 高级编程ArrayList 子类】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/402


ArrayList 子类


ArrayList 是 List 子接口使用最多的一一个子类,但是这个子类在使用的时候也是有前提要求的,所以本次来自对这个类的相关定义以及源代码组成进行分析,在 Java 里面 ArayList 类的定义如下:

public class ArrayList E>.

extends AbstractList.

implements List

ArrayList 子类的继承结构如下所

ArrayList 子类| 学习笔记


范例:使用 ArrayList 实例化 List 父接口。

1package cn. mldn. demo;

2

3import java.util .ArrayList;

4import java.util.List;

5

6 public class J avaAPIDemo

7   public static void main(String[ ] args) throws Except

8      List allnew ArrayList() ;

9      all . add("Hello") ;

10     all. add("Hello") ;     11 重复数据

11     all. add( "World") ;

 

通过本程序可以发现 List 存储的特征:

保存的顺序就是其存储顺序;

List 集合里面允许存在有重复数据。

在以上的程序里而虽然实现了集合的输出,但是这种输出的操作是直接利用了每一个类提供的 toString ()方法实现的,为了方便的进行输出处理,在 JDK 1.8 之后 Iterable 父接口之中定义有一个 forEach 方法,方法定义如下: 

输出支持: default void forEach(Consumer action); .

 

范例:利用 forEach 方法输出(不是标准输出)

 

需要注意的是,此种输出并不是在正常开发情况下要考虑的操作形式。

如果以方法的功能为例,那么 ArrayI ist 里面操作支持与之前编写的链表形式是非常相似的,但是它并不是使用链表来实现的,通过类名称实际上就已经可以清楚的实现了, ArrayList 立刻封装的是一个数组。

通过类名称实际上就已经可以清楚的发现了, ArayList 应该封装的是一个数组。

ArrayList 子类| 学习笔记

ArrayList 子类| 学习笔记

通过有参构造方法可以发现,在 ArrayI ist 里而所包含的数据实际上就是一个对象数组,如果现在在进行数据追加的时候发现 ArrayList 集合里面保存的对象数组的长度不够的时候那么会进行新的数组开辟,同时将原始的旧数组内容拷贝到新数组,这个数组的开辟操作:

 

如果在实例化 ArrayList 类对象的时候并没有传递初始化的长度,则默认情况下会使用一个空数但是如果在使用数据增加的时候发现数组容量不够了。

则会判断当前的增长的容量与默认的容量的大小,使用较大的一个数值进行,就可以得出一个结论:

 JDK1.9 之后: ArrayI ist 默认的构造只会使用默认的空数组,使用的时候才会开辟数组,默认的开辟长度为 10

 

JDK1.9 之前: ArrayL ist 默认的构造实际上就会默认开辟大小为 10 的数组。

 当 ArrayList 之中保存的容量不足的时候会采用成倍的方式进行增长,原始长度为10 , 那么下次的增长就是 20 ,以此类推,估算出数据量会有多少,如果超过了 10 个,那么使用有参构造方法进行创建,以避免垃圾数组的产生。

 


上一篇:CharSequence 接口|学习笔记


下一篇:图书模板之查询所有图书 | 学习笔记