Java中ArrayList的模拟实现

it2022-05-05  141

ArrayList模拟实现

一、能够无限的向数组中添加元素

1.分析怎么能够无限添加元素了,这个时候我们就需要动态的改变数组的大小,每次添加数据时就需要判断数组大小,这个是本次模拟的重点是System.arraycopy(数组拷贝),代码实现如下:

//存储数据源数组 private int[] arr; //初始索引 private int index; //初始存储容量 private int initCapacity = 3; /**创建一个初始长度为3的数组*/ public MyArray() { arr = new int[initCapacity]; } /**创建一个给定长度的数组*/ public MyArray(int len) { arr = new int[len]; } /**添加目标元素*/ public void add(int e) { //检查容量(扩充) ensureCapacity(); //讲元素追加到制定位置 arr[index++] = e; } /**判断容量是否足够*/ private void ensureCapacity() { if (index >= arr.length) { int[] temp = new int[arr.length+arr.length/2]; System.arraycopy(arr, 0, temp, 0, arr.length); arr = temp; temp = null; } }

二、可以通过get方法获取指定位置的元素

1.这个就不需要过多的解释,世界根据索引返回元素,代码实现如下

/**返回指定索引的元素*/ public int getIndexValue(int p){ return arr[p]; }

三、可以通过size方法获取数组中元素的个数

1.直接返回index前面定义的索引,这个就是大小,代码如下:

/**返回数组中元素的个数*/ public int size(){ return index; }

四、模拟增、删、查、改、排序操作

话不多说,直接上代码:

/**删除指定索引元素*/ public void remove(int pos){ //调用数组拷贝函数 //System.arraycopy(arr, pos+1, arr, pos, arr.length - (pos + 1)); for(int i = pos;i < index-1;i++) { arr[i] = arr[i+1]; } arr[index-1] = 0; index--; } /**显示所有元素*/ public void show() { for(int i = 0;i < index ;i++) { System.out.print(arr[i]+" "); } } /**指定位置插入指定元素*/ public void insert(int p,int element) { ensureCapacity(); for(int i = index;i > p;i--) { arr[i] = arr[i-1]; } arr[p] = element; index++; } /**排序*/ public void sort(int[] a) { int team = 0; //临时变量 for (int i = 0; i < index; i++) { for (int j = i+1; j <= index; j++) { if (a[i] > a[j]) { team = a[i]; a[i] = a[j]; a[j] = team; } } } System.out.println("排序完后的数组为:"); for(int n:a) { System.out.print(n+" "); } } /**修改制定索引位置的值*/ public void Updata(int index,int element) { arr[index] = element; show(); }

最新回复(0)