接口

 

ArrayList实现了List接口,因此可以当作一个List来使用。
此外,ArrayList还实现RandomAccess接口和Serializable,说明ArrayList支持随机访问并且支持Java序列化机制。

 

实现

 

ArrayList内部含有的非静态域只有两个,一个用户保存数据的Object数组 elementData,和一个用于表示当前数据数量的size。

为什么不使用elementData的length来表示size呢? 因为elementData的length表示的此ArrayList当前的容量,而不是元素个数。

同时注意到elemantData是生命为transient的,说明这个域的并不是自动序列化的,需要ArrayList自行处理。

 

从elementData的注释中可以看到,如果当前是一个空的数组,那么当第一个元素被加入时,elementData的大小将会增长到默认大小(10),而不是1.这样做有利于减少数组重新分配的概率,提高运行时效率。

 

大家都知道,ArraList是支持泛型的,那么为什么要将elementData定义为Object的数组,而不是泛型数组呢? 这是因为泛型参数是不支持new的

 

部分方法说明

  • trimToSize()

    此方法将elementData的大小调整到刚好能容纳当前的所有元素,以减少内存占用。

  • toArray

    无参的形式,会调用Arrays.copyOf将elementData直接拷贝一份作为结果返回,这样调用者就可以直接修改这个返回的数组,而不影响到arrayList。

    带一个数组参数的形式,如果传入的数组足以容纳当前的所有元组,则将当前所有元素拷贝到传入的数组中,否则就会新建一个数组并拷贝进去,然后作为结果返回回去。如果传入的数组的大小,超过了当前元素的数量,则会在拷贝进去之后,将拷贝进去的最后一个元素之后的元素置为null,调用着可以根据这个null的位置来判断拷贝了多少个元素进去。

  • ensureCapacity

    确保此ArrayList的容量能满足入参要求,如果有必要,会增加ArrayList的容量。

  • contains

    通过从前往后顺序遍历元素,对每个元素调用equal的方式,来检查是否包含某个元素。

  • indexOf

    通过从前往后顺序遍历元素,对每个元素调用equal的方式,来检查是否包含某个元素,如果包含,返回去下标。

  • lastIndexOf

    同indexOf,只是,现在是从后往前开始查找了。

  • grow

    这个方法是动态增长数组的核心,首先尝试增加一半的大小,如果增加了一半之后,依然不能满足要求,就直接增加到需要的大小。

  • subList

    sublist方法返回给定范围内的子序列,但是要注意,这个方法返回的只是原数组在指定的开始索引和结束索引之间的一个视图,并没有重新开辟一个数组,因此任何对这个sublist的修改,都会反映到原数组上,and
    vice versa.

    生成了sublist之后,如果直接操作原数组导致结构发生了变化,那么下次操作sublist之后,就会抛出并行修改异常。通过sublist对象来操作则没有问题。

ArrayList 学习笔记的更多相关文章

  1. Java中ArrayList学习笔记

    1. 先看两段代码 这段代码在执行的时候会报 但是这样写就好着呢: 总结,研究报错的代码 ,在for循环的时候调用next()方法,next方法中调用了checkForComodification这个 ...

  2. [Java] List / ArrayList - 源代码学习笔记

    在阅读 List / ArrayList 源代码过程中,做了下面的笔记. LinkedList 的笔记较多,放到了另一篇博文 LinkedList / Queue- 源代码学习笔记 List List ...

  3. java集合类学习笔记之ArrayList

    1.简述 ArrayList底层的实现是使用了数组保存所有的数据,所有的操作本质上是对数组的操作,每一个ArrayList实例都有一个默认的容量(数组的大小,默认是10),随着 对ArrayList不 ...

  4. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  5. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  6. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. 初学c# -- 学习笔记(一)

    初学c# -- 学习笔记(一) 学习C#了,参考许多资料,一步步学习.这一段学习ajax的工作原理,参照其他例子写了web版的群聊小程序,全部文件代码也就不到300行,很简单.使用时先输入用户名,点确 ...

  8. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  9. JProfiler学习笔记

    JProfiler学习笔记   一.安装JProfiler        从http://www.ej-technologies.com/下载5.1.2并申请试用序列号   二.主要功能简介 1.内存 ...

随机推荐

  1. CentOs上搭建git服务器

    CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...

  2. 神器-Sublime Text 3 代码编辑器安装与使用

    一.软件获取 1.软件下载地址:http://www.sublimetext.com/3. 2.注册机和汉化下载:http://files.cnblogs.com/files/1312mn/subli ...

  3. DHCP租约时间工作原理

    问题:    很多用户在使用路由器的DHCP服务器过程中都有一个疑问,DHCP有个设置项目是设置DHCP地址的租约时间,如果设置的比较短,是否会出现租约时间到了以后会重新去获取ip地址,造成用户断网? ...

  4. phpwind伪静态规则(IIS,Nginx,Apache)的介绍及代码

    phpwind iis下伪静态规则[ISAPI_Rewrite]RewriteRule ^(.*)/(.*)-htm-(.*)-(.*).html$ $1/$2.php?$3=$4RewriteRul ...

  5. opencv中Mat类型数据操作与遍历

    Mat作为opencv中一种数据类型常常用来存储图像,相对与以前的IplImgae类型来说,Mat类型省去了人工的对内存的分配与释放,转而自动分配释放.Mat Class主要包括两部个数据部分:一个是 ...

  6. Linux下使用QQ的几种方式

    Linux下没有官方的QQ聊天应用,对于经常使用QQ与朋友同事沟通交流的小伙伴们来说肯定很不方便,在Linux下可以使用以下几种方法使用QQ:   1.wine qq for linux Ubuntu ...

  7. Practice: Process logs with Apache Hadoop

    http://www.ibm.com/developerworks/library/os-log-process-hadoop/ Analyzing Apache logs with Apache P ...

  8. ural 1126 Magnetic Storms

    http://acm.timus.ru/problem.aspx?space=1&num=1126 #include <cstdio> #include <cstring&g ...

  9. 18个SaaS及其功能评价

    SAAS软件及其功能评价1. 360 两个同步功能都不错,却被埋没了2. 够快云3. DBFen4. Seafile5. 坚果云6. DZ7. 百度云8. 1159. 迷你云10. 微云11. Dro ...

  10. android中使用PopupWindow实现弹出窗口菜单

    结合上篇android中使用ViewPager实现图片拖动,我们实现了点击“帮助”按钮的功能,这一篇则是接着上一篇,让我们一起来完成“我的”按钮的功能,这一功能,则是使用PopupWindow来实现弹 ...