ArrayList(JDK1.9)
一、ArrayList概念。
1、数据结构。它是一个数组,可以动态增长的数组。
2、继承实现关系图。继承抽象List,实现List、随机方法、克隆、序列化。
3、
二、内部类。
final class ArrayListSpliterator implements Spliterator<E>
private class Itr implements Iterator<E>
private class ListItr extends Itr implements ListIterator<E>
private static class SubList<E> extends AbstractList<E> implements RandomAccess
三、成员变量。
1、数组elementData。是最重要的成员。存放真实数据。
2、大小size。数组中已经存放的元素个数,而elementData.length表示数组的大小,显然size <= elementData.length。当两者相等则需要扩容。
3、数组的默认容量DEFAULT_CAPACITY。
4、数组最大容量MAX_ARRAY_SIZE。
5、空数组EMPTY_ELEMENTDATA。用户指定容量为0时返回的。
6、默认容量的空数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA。
7、序列号。
3、
3、
四、成员方法。
1、构造方法1。指定数组大小。检查容量参数的合法性。确定数组大小。
2、构造方法2。不指定容量。则为空数组。
3、构造方法3。用一个集合初始化。
4、get方法。先检查参数,主要是数组下标是否越界处理。
5、扩容方法。新的容量 = 旧容量 + 旧容量/2;
新增数据的相关方法:
6、在尾部添加一个新元素。(检测是否扩容)
7、指定位置处添加元素。(检查索引合法性,必须在[0,size]范围内)
8、在尾部添加多个新元素的集合。(检测是否扩容)
9、在指定位置处开始添加多个新元素的集合。(检测是否扩容)
删除元素的相关操作:
10、删除指定位置处的元素。(检查索引合法性;复制覆盖,返回删除的数据)
11、删除指定的元素。(不存在该元素则返回false,否则返回true)
12、删除所有元素。
更新数据的相关操作:
13、更新指定位置处的元素。(检查索引合法性、保存旧的数据、新数据覆盖,返回旧数据)
查找元素的相关操作:
14、获取指定位置处的元素。
15、获取指定元素的第一个索引。(不存在则返回-1)
16、获取指定元素的倒数第一个索引。(不存在则返回-1)
17、是否存在指定元素。
其他相关操作:
18、是否为空。
19、集合大小。
20、更改数组大小为实际元素个数的大小一样大,即size == elementData.length。
4、
4、
3、
4、
3、
4、
3、
4、
ArrayList(JDK1.9)的更多相关文章
- 源码分析--ArrayList(JDK1.8)
ArrayList是开发常用的有序集合,底层为动态数组实现.可以插入null,并允许重复. 下面是源码中一些比较重要属性: 1.ArrayList默认大小10. /** * Default initi ...
- ArrayList实现原理(JDK1.8)
ArrayList实现原理(JDK1.8) public class ArrayList<E> extends AbstractList<E> implements List& ...
- LinkedList实现原理(JDK1.8)
LinkedList实现原理(JDK1.8) LinkedList底层采用双向链表,如果对链表这种结构比较熟悉的话,那LinkedList的实现原理看明白就相当容易. 链表通过"指针&quo ...
- 源码分析(2)-LinkedHashMap(JDK1.8)
1.概述 LinkedHashMap继承自HashMap:在HashMap基础上,通过维护一条双向链表,解决了HashMap键值对遍历顺序和插入顺序一致的问题. 想了解LinkedHashMap源码, ...
- 使用ArrayList时代码内部发生了什么(jdk1.7)?
前言 ArrayList(这里的ArrayList是基于jdk1.7)是在项目中经常使用的集合类,例如我们从数据库中查询出一组数据.这篇文章不去剖析它的继承和实现,只是让我们知道实例化及增删改查时它的 ...
- ArrayList集合(JDK1.8)
简述 List是继承于Collection接口,除了Collection通用的方法以外,扩展了部分只属于List的方法. 常用子类 ?ArrayList介绍 1.数据结构 其底层的数据结构是数组,数 ...
- Java集合:ArrayList (JDK1.8 源码解读)
ArrayList ArrayList几乎是每个java开发者最常用也是最熟悉的集合,看到ArrayList这个名字就知道,它必然是以数组方式实现的集合 关注点 说一下ArrayList的几个特点,也 ...
- ArrayList源码浅析(jdk1.8)
ArrayList的实质就是动态数组.所以可以通过下标准确的找到目标元素,因此查找的效率高.但是添加或删除元素会涉及到大量元素的位置移动,所以效率低. 一.构造方法 ArrayList提供了3个构造方 ...
- ArrayList源码解析(JDK1.8)
package java.util; import sun.misc.SharedSecrets; import java.util.function.Consumer; import java.ut ...
随机推荐
- Repository(资源库)模式
Repository(资源库) 协调领域和数据映射层,利用类似于集合的接口来访问领域对象 定义(来自Martin Fowler的<企业应用架构模式>): Mediates between ...
- javaAgent 参数
-javaagent 这个JVM参数是JDK 5引进的. Java -help的帮助里面写道: -javaagent:<jarpath>[=<options>] load Ja ...
- mysql概要(十四)(一)索引
1.索引是对数据库数据建立目录加快了查询速度.索引分为哈希索引和二叉树索引 (大数据量转移,如果表中带有大量字段索引,进行数据导入时,建议先去掉索引导入数据再统一加入索引,减少索引计算量) 2.索引原 ...
- springMVC 报错:Unknown return value type: java.lang.Integer
controller层返回值类型为Integer,运行报错: Unknown return value type: java.lang.Integer 解决办法:在此方法上写上注解 @Response ...
- iOS - 音乐播放器需要获取音乐文件的一些数据信息(封装获取封面图片的类)
// // AVMetadataInfo.h // AVMetadata // // Created by Wengrp on 15/10/27. // Copyright © 2015年 Wengr ...
- thinkphp5部署在宝塔面板问题!
遇到一个问题,就是当thinkphp5部署在宝塔面板上,会出现这个问题: 参考解决办法: http://www.thinkphp.cn/topic/56589.html 首先:thinkphp5的目录 ...
- CmD空格转义的三种方法,总有一种会解决问题
CmD空格转义 在cmd中,如果路径中存在空格报错 可以有三种解决方法: 1.将存在空格的路径用双引号包起来,如:"D:/Program Files/xx"; 2.将存在空格的名称 ...
- 9.12 Django路由
2018-9-12 12:14:29 路由就是根据具体业务需求写的! 有的业务多,路由多,然后就需要细化 然后根据需求该! 怎么方便怎么来! 越努力,越幸运! 贴上笔记! 路由url根据需要可用修改, ...
- CentOS7.5搭建Solr7.4.0集群服务
一.Solr集群概念 solr单机版搭建参考: https://www.cnblogs.com/frankdeng/p/9615253.html 1.概念 SolrCloud(solr 云)是Solr ...
- pcl学习笔记(二):点云类型
不同的点云类型 前面所说的,pcl::PointCloud包含一个域,它作为点的容器,这个域是PointT类型的,这个域是PointT类型的是pcl::PointCloud类的模板参数,定义了点云的存 ...