Java中ArrayList的模拟实现

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

你可能感兴趣的:(技术类)