Java-ArrayList的实现

我们在使用数组这种数据类型的时候会遇到一个问题,就是这个数组在一开始的时候就要确定一定的长度,这使得数组的容量有限,一旦后续需要存储的数据个数超过了数组长度,就无法再存储了。
为了在实际应用中,有一个可以不限制长度的数组,我们要自己实现一个ArrayList。实现ArrayList的方法是通过对数组和相关参数进行封装,来起到自动扩容的作用。具体来说,就是当数组没有被填满的时候,后续的数据和普通数组一样存入,当要数组被填满的时候,我们就new一个新的,更长的数组,将原来的数组内容以此复制到新的数组内,并存入新的待存储数据。
添加6进入ArrayList

我们将每次申请的新数组长度设置为原数组长度的1.5倍,不是每一次都只添加一个是因为:这样可以有效降低在需要输入大量数据的时候,算法的时间复杂度。在添加过程中,n==size+1的时候时间复杂度为O(n),其他时候时间复杂度为O(1)。而如果每一次申请的数组长度都比之前多1的话,就会导致每一次的数据总量n==size+1,进而每一次的时间复杂度都为O(n)。

有了思路就好实现代码了。

public class SArrayList<E> {
	private Object[] arr = new Object[10]//申请一个初始长度为10的数组;
	private int size;//arraylist的长度
	
	//添加
	public void add(E data) {
		//如果数组满了就申请扩容,如果不满就直接填入,并且size++
		if (size == arr.length) {
			//new 一个新的数组
			Object[] arr = new Object[(int)(1.5*size)];
			//原数组数据转存到新数组
			for (int i = 0;i<size;i++) {
				arr[i] = this.arr[i];
			}
			size++;
			arr[size] = data;
			this.arr = arr;
		}
		else {
			size++;
			arr[size] = data;
		}
	}
	//删除
	public E remove(int index) {
		E temp = (E)arr[index];
		for(int i = index;i<size-1;i++){
			arr[i] = arr[i+1];
		}
		size--;
		return temp;
	}
	//查询
	public E get(int index) {
		return (E)arr[index];
	}
	//获得长度
	public int size() {
		return size;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值