JAVA设计容器 该容器可以添加添加如何数

一、设计容器的需求:

1.该容器可以添加添加如何数
2.可以动态获取容器存储数据的个数
3.如果打印容器对象的时候,不打印地址,而是打印具体值
4.可以根据索引修改数据
5.可以根据索引查询数据
6.可以根据索引删除数据
7.支持半自动扩容
8.支持全自动扩容

二、容器类设计

import java.util.Arrays;

public class Container {
	//定义一个数组  默认容量为10个数
	private Object[] arr = new Object[10];
	//定义数组下标
	private int index;
	
	/**
	 * 调用无参构造方法
	 *   容量默认为10个
	 */
	public Container() {
		this(10);
	}
	/**
	 * 调用有参构造方法
	 * @param len   数据长度
	 * 
	 * 半自动扩容方法
	 */
	public Container(int len) {
		this.arr = new Object[len];
	}
	
	/**
	 * 添加内容的方法
	 * @param a   添加的值
	 * 
	 * 全自动扩容方法
	 */
	public void add(Object a){
		//如果存储个数大于或者等于数据存储的容量
		if(size()>=arr.length){
			//将容量扩到2倍
			Object[] dest = new Object[size()*2];
			//将源数组里面的值复制到新数组中
			System.arraycopy(arr, 0, dest, 0, size());
			//把dest的地址值给到arr  
			arr = dest;			
		}
		//对应的下标赋值
		arr[index] = a;
		//添加一个值 下标加1 
		index++;
	}
	/**
	 * 获取数据个数
	 * @return  返回数据个数
	 */
	public int size(){
		//返回数据个数
		return index;
	}
	/**
	 * 重写toString方法
	 */
	@Override
	public String toString() {
		//创建一个新数组,长度为源数组数据个数
		Object[] dest = new Object[size()];
		//将源数组的值复制到新数组
		System.arraycopy(arr, 0, dest, 0, size());
		//返回打印
		return Arrays.toString(dest);
		
	}
	/**
	 * 修改数据
	 * @param index	修改位置
	 * @param a		修改值
	 * @throws IndexOutOfBoundsException	如果索引为负数或者超过最大索引就抛出此异常
	 */
	public void revise(int index,Object a)throws IndexOutOfBoundsException{
		//判断传入的索引值是否超出范围
		if(index < 0 || index >= size()){
			//如果超出范围就抛出自定义异常
			throw new IndexOutOfBoundsException("可以修改数据的索引范围是:[0,"+(size()-1)+"]");
		}
		arr[index] = a;
	}
	/**
	 * 查询数据
	 * @param index	查询索引
	 * @return		返回查询值
	 * @throws IndexOutOfBoundsException	如果索引为负数或者超过最大索引就抛出此异常
	 */
	public Object query(int index)throws IndexOutOfBoundsException{
		//判断传入的索引值是否超出范围
		if(index < 0 || index >= size()){
			//如果超出范围就抛出自定义异常
			throw new IndexOutOfBoundsException("可以查询数据的索引范围是:[0,"+(size()-1)+"]");
		}
		//返回值
		return arr[index];
	}
	public void delete(int index)throws IndexOutOfBoundsException{
		//判断传入的索引值是否超出范围
		if(index < 0 || index >= size()){
			//如果超出范围就抛出自定义异常
			throw new IndexOutOfBoundsException("可以删除数据的索引范围是:[0,"+(size()-1)+"]");
		}
		//将数组的值向前移动
		System.arraycopy(arr, index+1, arr, index, size()-index-1);
		//最后以为变为初始值
		arr[size()-1] = 0;
		//删除数据后,长度减1
		this.index--;
	}
}

三、测试类

/** 
 * 测试
 */
public class ContainerTest {

	public static void main(String[] args) {	
		Container a = new Container();	
		
		a.add(1);	//当容量不够时,会自动扩容
		a.add("雨下一夜");
		a.add('A');
		a.add('a');
		a.add(466);
		a.add(true);
		a.add(798734L);
		a.add(12.35f);
		a.add(new Object());
		a.add("点点关注!!!");
		
		//打印容量的所有值
		System.out.println(a);		
		//修改数据
		a.revise(5, 3);
		System.out.println("修改数据后:"+a);
		//查询数据
		System.out.println("查询到的值:"+a.query(2));
		
		//删除数据
		a.delete(0);
		System.out.println("删除数据后:"+a);
		//打印存储数据个数	
		System.out.println("存储数据个数:"+a.size());
	}

}

四、效果展示
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值