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 ...
随机推荐
- mysql索引覆盖之innodb和myisam效率问题
问题: create table A ( id varchar(64) primary key, ver int, ... ) 我的表有几个很长的字段varchar(3000) 在i ...
- vue生成路由实例
一.vue路由https://router.vuejs.org/zh-cn/1.bower下载vue-routervue的里的链接 <router-link to="/home&quo ...
- MAC 安装ram
RVM 是干什么的这里就不解释了,后面你将会慢慢搞明白. $ curl -L https://get.rvm.io | bash -s stable 期间可能会问你sudo管理员密码,以及自动通过ho ...
- vue--动态路由和get传值
动态路由: <template> <div id="News"> <v-header></v-header> <hr> ...
- vs code 搭建flutter运行环境(mac)
之前开发过hybrid app,用的是webview渲染,由于webview的体验会没有原生的体验好,所以对跨端原生开发燃起了学习的兴趣,在react-native和flutter之间纠结, 看了网上 ...
- Laravel 查询包括软删除的记录
查询结果包括已被软删除的记录: Model::withTrashed()->get(); 只查询软删除记录: Model::onlyTrashed()->get(); PS:个人博客-La ...
- HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...
- JDBC及Filter
JNDI容器:Java Naming Directory Interface,java命名目录接口EJB:javaEE服务器端组件模型,Enterprise JavaBean,设计目标与核心应用是建立 ...
- hadoop 2.x HA(QJM)安装部署规划
一.主机服务规划: db01 db02 ...
- Linux free命令详解
前段时间有个项目的用C写的,性能测试时发现内存泄露问题.关于怎么观察内存使用问题,free是很好用的一个命令. 参数讲解 bash-3.00$ freetotal used f ...