从零单刷数据结构(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();
}
}