ArrayList 子类| 学习笔记

简介: 快速学习 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 子类的继承结构如下所

图片1.png


范例:使用 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  应该封装的是一个数组。

image.png

image.png

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

 

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

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

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

 

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

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

 


相关文章
|
3月前
|
Java
聊聊Java集合框架中的Arrays类
``Arrays`` 和 ``Collections``是分别操作数组和集合的两个工具类。今天就来对 ``Arrays`` 中的内容作个总结。
94 1
聊聊Java集合框架中的Arrays类
|
4月前
|
算法
ArrayList类
ArrayList类
22 0
|
8月前
|
存储 Java API
ArrayList类【JDK源码分析】
ArrayList类【JDK源码分析】
33 0
|
10月前
|
存储 Java
Java中的Set接口(实现类HashSet和HashSet子类LinkedHashSet)
Java中的Set接口(实现类HashSet和HashSet子类LinkedHashSet)
|
存储 Java
Java集合Collection类
数组在存储多个数据方面的缺点: 一旦初始化后,其长度就确定了 数组中提供的方法非常有限,对于添加、删除、插入数据等操作非常不便,同时效率不高。 获取数组中实际元素个数的需求,数组没有现成的属性或方法可用。 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求不能满足。
62 0
|
存储 Java 开发者
ArrayList 子类| 学习笔记
快速学习 ArrayList 子类
109 0
ArrayList 子类| 学习笔记
|
机器学习/深度学习 Java 开发者
LinkedList 子类|学习笔记
快速学习 LinkedList 子类
LinkedList 子类|学习笔记
|
Java 开发者
HashSet 子类|学习笔记
快速学习 HashSet 子类
104 0
HashSet 子类|学习笔记
|
存储 Java 开发者
HashMap 子类|学习笔记
快速学习 HashMap 子类
112 0
HashMap 子类|学习笔记
|
存储 Java 开发者
LinkedHashMap 子类|学习笔记
快速学习 LinkedHashMap 子类
LinkedHashMap 子类|学习笔记