ArrayList 子类 |学习笔记

简介: 快速学习 ArrayList 子类

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

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


ArrayList 子类


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

 

public class ArrayList E>.

extends AbstractList<E>.

implements List<E , RandomAccess Cloneable, Serializable

 

ArrayList 子类的继承结构如下所

图片1.png

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

 

1package cn. mldn. demo;

2

3import java.util .ArrayList;

4 import java.util.List;

5

6 public class J avaAPIDemo

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

8 List<string> allnew ArrayList<String>() ;

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 <? super T> action); .

 

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

 

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

 

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

 

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


ArrayList构造: .

 

public ArrayList()-

public ArrayList() {

 

this. elementData = DEFAUL TCAPACITY EMPTY EL EMENTDATA;


public ArrayList() {

 

this. elementData = DEFAUL TCAPACITY EMPTY EL EMENTDATA;

ArrayList tJili: .  public  ArrayL ist(int    initialCapacity).

public ArrayList(int initialCapacity) {

 

if (initialCapacity > 0) {

 

this. elementData = new Object [initialCapacity];

 

] else if (initialCapacity == 0) {

 

this. elementData = EMPTY_ EL EMENTDATA;

 

] else {


throw new IllegalArgumentException("Illegal Capacity: "+

 

initialCapacity);

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

 

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

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

 

 

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

 

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

 

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

 

相关文章
|
2月前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
27 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
3月前
|
存储 算法 Java
14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
50 2
14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
|
6月前
|
Java
聊聊Java集合框架中的Arrays类
``Arrays`` 和 ``Collections``是分别操作数组和集合的两个工具类。今天就来对 ``Arrays`` 中的内容作个总结。
109 1
聊聊Java集合框架中的Arrays类
|
11月前
|
算法
ArrayList类
ArrayList类
43 0
Arrays类中的常见方法
导包 常见方法的使用 1.Arrays.toString() 2.Arrays.fill() 3.Arrays.sort() 4. Arrays.equals() 5.Arrays.binarySearch() 6.Arrays.copyOf() 和Arrays.copyOfRange()
83 1
|
存储 Java
Java中的Set接口(实现类HashSet和HashSet子类LinkedHashSet)
Java中的Set接口(实现类HashSet和HashSet子类LinkedHashSet)
|
存储 Java 开发者
ArrayList 子类| 学习笔记
快速学习 ArrayList 子类
129 0
ArrayList 子类| 学习笔记
|
机器学习/深度学习 Java 开发者
LinkedList 子类|学习笔记
快速学习 LinkedList 子类
136 0
LinkedList 子类|学习笔记
|
Java 开发者
HashSet 子类|学习笔记
快速学习 HashSet 子类
130 0
HashSet 子类|学习笔记
|
存储 Java 开发者
HashMap 子类|学习笔记
快速学习 HashMap 子类
165 0
HashMap 子类|学习笔记