数据结构——数组
时间复杂度
数组 | 增加 | 删除 | 修改 | 查询 |
---|---|---|---|---|
时间复杂度 | O(n) | O(n) | O(1) | O(1) |
修改: 数组名[index] = 修改的值或者元素 //再次输出可以看到已经被修改
查询:数组名[index] //可以直接获取相应下标的值
增加和删除方法
通过以往的学习写出增加、删除和修改方法
public class MyArray {
private int[] array;
private int size;//元素长度
//初始化
public MyArray(int n){
array = new int[n];
size = 0;
}
/**
* 判断是否是空
* @return 布尔值
*/
public boolean isEmpty(){
if(size>0)
return false;
return true;
}
/**
* 数组插入元素
* @param index 索引/下标
* @param element 值/元素
*/
//尾部插入 中间插入 头部插入(本质上就是中间插入,元素都是要往后移) 三种情况
//传入参数 插入的位置 和 元素
public void insert(int index,int element){
//判断索引位置是否合法
// 第一次插入只能是0 插入完成之后size++ 第二次插入可以是0可以是1 但是不能超过元素 要保证元素之间没有空隙
if(index<0||index>size) {
System.out.println("超出数组实际元素范围");
return;
}
//如果长度大于数组长度即容量上限,则对数组进行扩容
if(size>=array.length){
reSize();
}
//给索引赋值 不覆盖元素 用for循环将其他元素后移 没满的情况下
for(int i = size-1;i>=index;i--) {
array[i+1] = array[i];
}
array[index]=element;
size++;//长度加1
}
/**
* 扩容问题,可以不断插入元素
*/
public void reSize(){
//将数组复制到新数组
int[] temp = new int[array.length*2];
//方法1:利用循环赋值
for (int i = 0; i < array.length; i++) {
temp[i]=array[i];
}
//方法2:传递的参数(原数组,源索引位置,新数组,目标索引位置,复制的长度)
//System.arraycopy(array,0,temp,0,array.length);
array = temp;
}
/**
* @param index 要删除的索引
* @return 返回被删除的值/元素
*/
public int del(int index){
//判断删除的下标是否超出数组范围
if(0>index||index>=size){
System.out.println("要删除的索引有误");
return -1;
}
//做删除操作其实是把处在的元素替换 并将数组大小减1
int value = array[index];
//元素向前移动一位
for(int i = index;i<size;i++){
array[i]=array[i+1];
}
size--;
return value;
}
/**
* 改
*/
public void update(int index,int elem){
//判断修改的下标是否超出数组范围
if(0>index||index>=size){
System.out.println("要修改的索引有误");
return;
}
array[index]=elem;
}
/*
* 输出数组 查全部元素
*/
public void print(){
for (int i = 0; i < size; i++) {
System.out.print(array[i]+" ");
}
}
}
测试代码:
public class MyArrayDemo {
public static void main(String[] args) {
// 初始长度
MyArray ma = new MyArray(5);
ma.print();
boolean empty = ma.isEmpty();
System.out.println(empty);
// 插入元素
ma.insert(0,2);
ma.insert(0,3);
ma.insert(1,4);
ma.insert(1,5);
ma.insert(4,5);
ma.print();
//扩容增加
ma.insert(5,7);
System.out.println();//换行
ma.print();
System.out.println();
//删除元素
System.out.println("删除的元素为:"+ma.del(0));
ma.print();
System.out.println("删除的元素为:"+ma.del(5));
ma.update(1,6);
ma.print();
boolean empty1 = ma.isEmpty();
System.out.println("是否为空:"+empty1);
}
}