从零单刷数据结构(Java描述)(三)——数组

数组是一种典型的顺序存储结构,用一段地址连续的存储单元依次存储线性表的数据元素。
从零单刷数据结构(Java描述)(三)——数组
扩展:自己动手实现可变数组

import java.util.Arrays;

public class MyArray {

	//用于存储数据的数组
	private int[] elements;
	
	//构造方法
	public  MyArray() {
		elements= new int[0];
	} 
	
	//获取数组长度的方法
	public int size() {
		return elements.length;
	}
	
	//往数组里添加一个元素
	public void addElement(int dst) {
		int []newArr= new int[elements.length+1];
		for (int i = 0; i < elements.length; i++) {
			newArr[i]=elements[i];
		}
		newArr[elements.length]=dst;
		elements=newArr;
	}
	
	//打印元素
	public void show() {
		System.out.println(Arrays.toString(elements));
	}

	//删除元素
	public void delElement(int index) {
		if(index<0||index>elements.length)throw new RuntimeException("下标越界");
		int[] newArr=new int[elements.length-1];
		for (int i = 0; i <newArr.length; i++) {
			if(i<index)newArr[i]=elements[i];
			else newArr[i]=elements[i+1];
		}
		elements=newArr;
	}
	
	//获取某个元素
	public int getElement(int index) {
		if(index<0||index>elements.length)throw new RuntimeException("下标越界");
		return elements[index];
	}
	
	//插入元素
	public void insertElement(int dst,int index) {
		int[]newArr=new int[elements.length+1];
		for (int i = 0; i < elements.length; i++) {
			if(i<index)newArr[i]=elements[i];
			else newArr[i+1]=elements[i];
		}
		newArr[index]=dst;
		elements=newArr;
	}
	
	//替换元素
	public void setElement(int index,int dst) {
		if(index<0||index>elements.length)throw new RuntimeException("下标越界");
		elements[index]=dst;
	}
}

简单说下插入和删除功能的实现:

     //插入元素
	public void insertElement(int dst,int index) {
	//定义一个长度加一的新数组
		int[]newArr=new int[elements.length+1];
		//遍历赋值
		for (int i = 0; i < elements.length; i++) {
		//遍历数组,如果在插入元素的索引之前则将原数组的元素赋值给新数组
			if(i<index)newArr[i]=elements[i];
			//否则将插入元素的索引后的元素赋值给新数组
			else newArr[i+1]=elements[i];
		}
		//插入元素
		newArr[index]=dst;
		//将新数组赋值给原数组实现数组的改变
		elements=newArr;
	}
//删除元素
	public void delElement(int index) {
	//对不符合要求的删除指令主动抛异常
		if(index<0||index>elements.length)throw new RuntimeException("下标越界");
		//新建一个长度减一的数组
		int[] newArr=new int[elements.length-1];
		//遍历赋值
		for (int i = 0; i <newArr.length; i++) {
		//遍历数组,如果在插入元素的索引之前则将原数组的元素赋值给新数组
			if(i<index)newArr[i]=elements[i];
			//否则将插入元素的索引后的元素赋值给新数组
			else newArr[i]=elements[i+1];
		}
		//将新数组赋值给原数组实现数组的改变
		elements=newArr;
	}
//新建类操作数组
public class testMyArr {

	public static void main(String[] args) {
		//创建一个可变的数组
		MyArray ma = new MyArray();
		//获得长度
		System.out.println(ma.size());
		//添加元素
		ma.addElement(6666);
		ma.addElement(9999);
		ma.addElement(23);
		ma.addElement(32);
		//显示元素
		ma.show();
		//删除指定元素
		//ma.delElement(1);
		//ma.show();
		//打印指定元素
		System.out.println(ma.getElement(1));
		//在指定位置插入元素
		ma.insertElement(987, 2);
		ma.show();
		//在指定位置修改元素
		ma.setElement(2, 985);
		ma.show();
	}

}