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();
}