一、数组的定义与特点
(1)数组是相同数据类型的元素的集合。
(2)数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。内存地址
(3)数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
二、数组的优劣势
数组优势:数组拥有非常高效的随机访问能力,只要给出下标,就能用常量时间找到对应元素;
数组劣势:在插入和删除元素的时候,如果插入的数据不是在最后或者删除的不是最后一个,在进行插入和删除时,由于数组元素连续紧密地存储在内存中,因此需要频繁地移动元素。
因此,数组适合读操作多,写操作少的场景。
1.3ArrayList
本质还是一个数组,不过是JDK帮我们进行了封装,不需要我们去维护数组扩容,如果在不知道数组长度的情况下一般用ArrayList。
三、下面我们模拟实现对一个数组的增删改查功能
public class MyIntArray {
public int size; //数组的大小
public int curSize; //当前数组已经使用的大小
public int[] data;
public MyIntArray(int size) {
this.size = size;
this.curSize = 0;
this.data = new int[size];
}
/**添加*/
public void add(int index, int val) { //时间复杂度o(n)
if(index+1 < size){
for(int i = size-1; i>index;i--){
data[i] = data[i-1];
}
data[index] = val;
}
this.curSize++;
//做数组扩容
}
/**删除*/
public void del(int index) { //时间复杂度o(n)
data[index] = 0;
for(int i = index; i<size-1;i++){
data[i] = data[i+1];
}
this.curSize--;
}
/**更新*/
public void update(int index, int val) { //时间复杂度o(1)
data[index] = val;
}
/**查找*/
public int find(int index) { //时间复杂度o(1)
return data[index];
}
/**打印数组*/
public void print(){
for (int i = 0;i<size;i++) {
System.out.println(i+":"+data[i]);
}
}
}
MyIntArray myIntArray = new MyIntArray(8);
System.out.println("----add----");
myIntArray.add(0,0);
myIntArray.add(1,1);
myIntArray.add(2,2);
myIntArray.add(1,11);
myIntArray.print();
System.out.println("----del----");
myIntArray.del(1);
myIntArray.print();
System.out.println("----update----");
myIntArray.update(1,111);
myIntArray.print();
System.out.println("----find----");
System.out.println(myIntArray.find(1));