欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中ArrayList的模拟实现

程序员文章站 2022-04-18 18:35:27
...

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