数组的增删改查操作实现

package dataStructures.list;

public class MyArray {
	int[] array;
	public MyArray() {
		array=new int[0];
	}
	/**
	 * 在数组末尾插入一个元素
	 * @param element
	 */
	public void insertLast(int element) {
		//先创建一个新的数值,比原数值的长度大于1
		int[] newArray=new int[array.length+1];
		//判断原数值是否为空
		if(!isEmpty()) {
			for(int i=0;i<array.length;i++){
				//把原数组中的值赋值给新数组
				newArray[i]=array[i];
			}
		}
		//把新增的元素赋值给新数组的最后一位
		newArray[newArray.length-1]=element;
		//用新数组替换原数组(引用替换)
		array=newArray;
	}
	
	public void insert(int index,int element) {
		if(index<0 || index>array.length-1) {
			throw new IndexOutOfBoundsException("下标越界了");
		}
		//新建一个长度大于原数组长度1位的新数组
		int[] newArray=new int[array.length+1];
		//循环原数组
		for(int i=0;i<array.length;i++){
			//如果i小于新增的下标,则复制原数组元素至新数组中
			if(i<index) {
				newArray[i]=array[i];
			}else {//如果i大于等于新增下标,则把原数组元素i位元素复制至新数组i+1位
				newArray[i+1]=array[i];
			}
		}
		//新数组index位的元素赋值为element
		newArray[index]=element;
		//新数组替换原数组
		array=newArray;
	}
	
	/**
	 * 根据下标删除数组元素
	 * @param index 下标
	 */
	public void remove(int index) {
		if(index<0 || index>array.length-1) {
			throw new IndexOutOfBoundsException("下标越界了");
		}
		//新建一个数组比原数组长度小1
		int[] newArray =new int[array.length-1];
		for(int i=0;i<array.length-1;i++) {
			//如果下标小于需要删除的下标,那么复制原数组的数据到新数组中
			if(i<index) {
				newArray[i]=array[i];
			}else {//如果下标大于等于需要删除的下标,则需跳过需要删除的下标,把原数组后面的数据复制到新数组
				newArray[i]=array[i+1];
			}
		}
		//新数组替换原数组
		array=newArray;
	}
	/**
	 * 根据下标更新数组的元素
	 * @param index 下标
	 * @param element 新元素
	 */
	public void update(int index,int element) {
		if(index<0 || index>array.length-1) {
			throw new IndexOutOfBoundsException("下标越界了");
		}
		array[index]=element;
	}
	
	/**
	 * 根据元素获取下标
	 * @param element
	 * @return 如果没找到,则返回-1
	 */
	public int getIndex(int element) {
		if(!isEmpty()) {
			for (int i = 0; i < array.length; i++) {
				if(array[i]==element) {
					return i;
				}
			}
		}
		return -1;
	}
	
	/**
	 * 根据下标获取数组内容
	 * @param index 下表索引
	 * @return
	 */
	public int getValue(int index) {
		if(index<0 || index>array.length-1) {
			throw new IndexOutOfBoundsException("下标越界了");
		}
		return array[index];
	}
	
	public boolean isEmpty() {
		return array.length==0;
	}
	
	public void show() {
		if (!isEmpty()) {
			for (int i = 0; i < array.length; i++) {
				System.out.print(array[i]+" ");
			}
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		MyArray myArray=new MyArray();
		myArray.insertLast(1);
		myArray.insertLast(2);
		myArray.insertLast(3);
		myArray.insertLast(4);
		myArray.insert(3, 8);
		myArray.show();
		System.out.println(myArray.getValue(1));
		myArray.remove(1);
		myArray.show();
		myArray.update(1, 9);
		myArray.show();
		System.out.println(myArray.getIndex(8));
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值