ArrayList 学习笔记
接口
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 学习笔记的更多相关文章
- Java中ArrayList学习笔记
1. 先看两段代码 这段代码在执行的时候会报 但是这样写就好着呢: 总结,研究报错的代码 ,在for循环的时候调用next()方法,next方法中调用了checkForComodification这个 ...
- [Java] List / ArrayList - 源代码学习笔记
在阅读 List / ArrayList 源代码过程中,做了下面的笔记. LinkedList 的笔记较多,放到了另一篇博文 LinkedList / Queue- 源代码学习笔记 List List ...
- java集合类学习笔记之ArrayList
1.简述 ArrayList底层的实现是使用了数组保存所有的数据,所有的操作本质上是对数组的操作,每一个ArrayList实例都有一个默认的容量(数组的大小,默认是10),随着 对ArrayList不 ...
- 大数据学习笔记——Java篇之集合框架(ArrayList)
Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 初学c# -- 学习笔记(一)
初学c# -- 学习笔记(一) 学习C#了,参考许多资料,一步步学习.这一段学习ajax的工作原理,参照其他例子写了web版的群聊小程序,全部文件代码也就不到300行,很简单.使用时先输入用户名,点确 ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- JProfiler学习笔记
JProfiler学习笔记 一.安装JProfiler 从http://www.ej-technologies.com/下载5.1.2并申请试用序列号 二.主要功能简介 1.内存 ...
随机推荐
- 解决:debug-stripped.ap_' specified for property 'resourceFile' does not exist.
1.错误描述 更新Android Studio到2.0版本后,出现了编译失败的问题,我clean project然后重新编译还是出现抑郁的问题,问题具体描述如下所示: Error:A problem ...
- vs2013+sql server2012 +win8.1+entity framework + linq
项目右键添加类选择“ADO.NET实体数据模型” 选择“空……” 项目会自动产生后缀.edmx的文件(ModelTest.edmx),会自动添加引用System.Runtime.Serializati ...
- aps.net 用ajax 读取服务端值
1.Default.aspx 页面内容 实例一: <%@ Page Language="C#" AutoEventWireup="true" Code ...
- 关于List、Set集合以及Map的使用
package tingjizifu; import java.util.*; public class TongJi { /* * 使用Scanner从控制台读取一个字符串,统计字符串中每个字符出现 ...
- 在android中如何查看sqlite数据表结构,以及data文件打不开问题
1.root你的手机 2.cmd进入DOS界面,并且cd 转换目录到AndroidSDK\platform-tools中 3.输入adb shell 4.输入su,进入root权限,此时$变为#,输入 ...
- static和const关键字的作用
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...
- jsp连接MySQL操作GIS地图数据,实现添加point的功能
index_map.jsp中的代码: <%@ page language="java" pageEncoding="utf-8"%> <%@ ...
- 多线程09-Lock和Condition
1.概念 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 2. ...
- Struts2+Spring4+Hibernate4整合超详细教程
Struts2.Spring4.Hibernate4整合 超详细教程 Struts2.Spring4.Hibernate4整合实例-下载 项目目的: 整合使用最新版本的三大框架(即Struts2.Sp ...
- git生成密钥
安装 Git-1.9.4-preview20140611 1 通过 ssh-keygen 但生成的位置却是C:\Users\Admin\AppData\Local\VirtualStore\Progr ...