ArrayList 子类| 学习笔记-阿里云开发者社区

开发者社区> 学堂小助手> 正文

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 个,那么使用有参构造方法进行创建,以避免垃圾数组的产生。

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9496 0
Silverlight之ListBox/Style学习笔记--ListBox版的图片轮换广告
ListBox是一个很有用的控件,其功能直逼Asp.Net中的Repeater,它能实现自定义数据项模板,纵向/横向排列Item(如果扩展一下实现自行折行,几乎就是SL版的Repeater了--实际上WrapPanel已经实现了,不过没有默认集成在SL3中).
839 0
history命令解析_学习笔记
时间:2017.11.13 作者:李强 参考:man,info,magedu讲义 声明:以下英文纯属个人翻译,英文B级,欢迎纠正,盗版不纠,才能有限,希望不误人子弟为好。 1、使用目的与场景     实现快速操作命令的一种方式 2、官方说明     Display or manipulate the history list. 3、写在前面     首先这里有两个概念history list和history file。
758 0
Java中ArrayList学习笔记
Java中ArrayList学习笔记 先看两段代码 这段代码在执行的时候会报 但是这样写就好着呢: 总结,研究报错的代码 ,在for循环的时候调用next()方法,next方法中调用了checkForComodification这个方法,这个方法里面判断modCount和expectedModCount不相等的时候就抛出ConcurrentModificationException这个异常。
721 0
台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression
上一节课,我们介绍了Linear Regression线性回归,以及用平方错误来寻找最佳的权重向量w,获得最好的线性预测。本节课将介绍Logistic Regression逻辑回归问题。
25 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13185 0
iOS学习之 plist文件的读写
在做iOS开发时,经常用到到plist文件,  那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。
1005 0
1220
文章
0
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载