java实现智能数组

题目:
java提供的数组有个特点: 当数组元素的个数确定后,就不能再追加元素了。

也就是说,数组的大小在创建的时候就固定了。

现在请你来写一个 智能数组类 SmartArray,它能够根据需要动态地分配空间

实际上,它 只不过是在其它位置分配新的数组,然后把旧的数据拷贝过去。

请提供数组访问方法:

int get(int idx); // 返回指定位置的元素值

void set(int idx, int value); // 对指定的下标元素设置新值。当然,如果下标超出了原来数组的大小,则自动分配新的空间。

代码:
class SmartArray
{
	private int capacity; // 程序实际存储数据的数组大小
	private int size;  // 用户视角的数组大小
	private int[] data;  //工作数组
	
	public SmartArray()
	{
		capacity = 16;
		size = 0;
		data = new int[capacity];
	}
	
	public int get(int idx)
	{
		return data[idx];
	}
	
	public void set(int idx, int value)
	{
		if(idx >= capacity){ // 重新分配,拷贝就数据
			if(idx >= capacity* 2) 
				capacity = idx+1;
			else
				capacity = capacity * 2;
				
			int[] dd = new int[capacity];
			for(int i=0; i<size; i++){
				dd[i] = data[i];
			}
			data = dd; //指向新数据,丢掉老数组
		}
		
		data[idx] = value;
		if(idx+1>size) size = idx+1;
	}
	
	public int length() { return size; }
}

public class MyA
{
	public static void main(String[] args)
	{
		SmartArray a = new SmartArray();
		a.set(2,22);
		a.set(3,33);
		a.set(9,99);
		a.set(15,1515);
		
		for(int i=0; i<a.length(); i++){
			System.out.println(i + ": " + a.get(i));
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值