线性表中模拟ArrayList的实现(add/remove)操作

网友投稿 880 2022-11-05

线性表中模拟ArrayList的实现(add/remove)操作

线性表中模拟ArrayList的实现(add/remove)操作

源码类

package day03;import java.util.Arrays;/** * @Author yqq * @Date 2022/05/05 19:50 * @Version 1.0 */public class ArrayList { /** * 定义一个数组,用于保存数组中的集合 */ private Object[] elementData; /** * 定义一个变量。用于保存数组中的元素的个数 */ private int size; /** * 获取数组中实际存放的元素个数 * @return */ public int size(){ return this.size; } /** * 无参构造方法(默认设置elementData数组的空间长度为10) */ public ArrayList(){ this.elementData = new Object[10]; } /** * 有参构造方法(指定设置elementData数组的空间长度) * @param cap */ public ArrayList(int cap){ //判断cap变量是否合法 if (cap < 0) throw new RuntimeException("参数不合法,cap:" + cap); //实例化elementData数组 this.elementData = new Object[cap]; } /** * 添加元素 * @param element */ public void add(Object element){ //判断数组是否需要扩容 increaceCapacity(); elementData[size] = element; //更新size的值 size ++; } /** * 根据索引获取元素 * @param index * @return */ public Object get(int index){ //判断索引是否合法 rangeCheck(index); //根据索引获取对应的元素值 return elementData[index]; } /** * 检查索引是否合法 * @param index */ private void rangeCheck(int index){ if (index < 0 || index >= size) throw new ArrayIndexOutOfBoundsException("索引越界,index:" + index); } /** * 判断数组是否需要扩容 */ private void increaceCapacity(){ if (elementData.length == size){ //创建一个比原数组空间长度更大的新数组 Object[] newArr = new Object[elementData.length * 2 + 1]; //把原数组中的元素拷贝进新数组中 for (int i = 0; i < elementData.length; i++) { newArr[i] = elementData[i]; } //让原数组保存新数组的地址值 elementData = newArr; } } /** * 根据索引删除元素 * @param index */ public void remove(int index){ //判断索引是否合法 rangeCheck(index); //把删除索引之后的元素往前挪一位 //先获取删除索引及其之后的所有索引值 for (int i = 0; i < size - 1; i++) { //把后一个元素往前挪动一位 elementData[i] = elementData[i + 1]; } //把最后一个实际添加的元素设置为默认值 elementData[size - 1] = null; //更新size size --; } /** * 在指定位置插入元素 * @param index * @param element */ public void add(int index,Object element){ //判断索引是否合法 if (index < 0 || index > size) throw new ArrayIndexOutOfBoundsException("索引异常,index:" + index); //判断数组是否需要扩容 increaceCapacity(); //插入索引及其之后的元素往后挪动一位 //获得插入索引及其之后的所有索引值 for (int i = size - 1; i >= index ; i --) { //把前一个元素往后挪动一位 elementData[i + 1] = elementData[i]; } //在插入索引位置实现赋值操作 elementData[index] = element; //更新size的值 size ++; } @Override public String toString() { return "ArrayList{" + "elementData=" + Arrays.toString(elementData) + '}'; }}

测试类

package day03;/** * @Author yqq * @Date 2022/05/05 20:04 * @Version 1.0 */public class Test02 { public static void main(String[] args) { ArrayList list = new ArrayList(3); list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); //根据索引删除元素// list.remove(0); //根据索引插入元素 list.add(0,"00"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }// System.out.println(list.get(10)); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:线性表环形单链表的约瑟夫问题如何实现实现
下一篇:杜甫很忙跑酷小游戏--phaser.js
相关文章

 发表评论

暂时没有评论,来抢沙发吧~