源码阅读:简单实现ArrayList中的主要方法
来源:互联网 发布:粒子滤波算法原理 编辑:程序博客网 时间:2024/06/01 09:10
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小
- 两个字段:数组容器与元素的个数size
/** * 字段:数组作为容器,与尺寸 */ Object[] elementData; int size;//区分数组中的属性length(容器的容量)
- 构造方法:(指定元素数组初始化容量 + 一个默认的10个容量大小)
public ArrayListImpl(int initialSize){ if (initialSize < 0){ throw new IllegalArgumentException("LIst容量不够"); } this.elementData =new Object[initialSize]; } public ArrayListImpl(){ this(10);//默认调用容量为10的构造方法 }
- 添加元素:之前需要检查容量,调用ensureCapacity,如果不够的话容量大小应该增加
public boolean add(Object element){ ensureCapacity(size + 1);//至少扩充容量的1个 elementData[size++] = element; return true; } /** * 确定容量:取max(指定的值minCapacity,1.5倍原来容量+1);并重新赋值 */ public void ensureCapacity(int minCapacity){//默认是为 size + 1:size指的是其中数据个数 int oldCapacity = elementData.length;//数组的长度 if (oldCapacity < minCapacity){//原来的空间不够了 int newlength = (oldCapacity * 3)/2 + 1; int newCapacity = Math.max(minCapacity,newlength); elementData = Arrays.copyOf(elementData,newCapacity);//复制数组 } }
- 指定index进行添加:[ index,后面的 ] 往后移动一个
public boolean add(int index, Object element){ if (index < 0 || index > size ){//如果为空或者已经越界了就抛出异常 throw new ArrayIndexOutOfBoundsException("数组索引错误index:"+ index); } ensureCapacity(size); System.arraycopy(elementData, index, elementData, index + 1, size - index);//往后偏移一个 elementData[index] = element; size++; return true; }
- 获取指定的元素:之前需要检查index时候越界
/** * 获取元素之前需要检查是否越界等 */ public Object get(int index){ rangeCheck(index); return elementData[index]; } public void rangeCheck(int index){ if (index > size){ throw new ArrayIndexOutOfBoundsException("您查找的元素越界了"); } }
- 删除元素:把当前到最后的元素进行往前移动一位,并删除让垃圾回收进行回收
public Object remove(int index){ rangeCheck(index); Object oldElement = elementData[index];//临时保存起来 int numMoved = size - index - 1;//长度 if (numMoved > 0){ System.arraycopy(elementData,index+1,elementData,index,numMoved); } elementData[--size] =null;//垃圾回收机制开始工作 return oldElement; }
0 0
- 源码阅读:简单实现ArrayList中的主要方法
- [Jdk源码阅读]ArrayList实现
- 简单实现Java中的ArrayList
- ArrayList源码阅读笔记
- ArrayList源码阅读
- ArrayList源码阅读
- java8 ArrayList源码阅读
- 源码阅读之ArrayList
- ArrayList源码阅读
- ArrayList源码阅读笔记
- ArrayList源码阅读
- Java源码阅读-ArrayList
- JDK源码阅读-ArrayList
- java8 ArrayList源码阅读
- Java源码阅读-ArrayList
- java8 ArrayList源码阅读
- ArrayList源码阅读笔记
- 集合类源码简单阅读(一)(ArrayList)
- 专升本高数学习总结——导数(2)
- 加极光推送注意的几个地方
- 文件名称与基本文件读取
- React组件的生命周期
- Redis发布与订阅(pub/sub)
- 源码阅读:简单实现ArrayList中的主要方法
- 两两交换(相邻)得到一个有序排列
- tensorflow学习笔记(三十二):conv2d_transpose ("解卷积")
- Redis复制(Replication)
- 第32届中国自动化学会青年学术年会(YAC‘2017)
- 算法笔记_028-字符串转换成整数(Java)
- centos7网络修改命令
- 安卓adb常用命令及错误提示
- pcb差分线包地,地线打过孔的原因