数组不是线性表。
数组的实现,核心是通过一个初始化的地址值、数组的长度、每个数组元素占得字节数组成。【因此会发现java中的数组就给我们提供了获取数组长度、得到某个数组元素值方法】
定位:用初始化的地址值与下标定位。【java数组本身的功能】
数组的实现,核心是通过一个初始化的地址值、数组的长度、每个数组元素占得字节数组成。【因此会发现java中的数组就给我们提供了获取数组长度、得到某个数组元素值方法】
定位:用初始化的地址值与下标定位。【java数组本身的功能】
【以下是自定义的一些方法,也就是说几乎所有的人都会这样去实现数组的查找、插入、删除操作;因此也就是说数组查找快,末尾插入快、但是中间插入慢,删除中间元素慢】
查找:用的是遍历数组的方式
插入:插入到最后。【实际上这里的max才是数组的真实长度,mArrayLength只是我们真是向数组中存入的数组元素时的长度】
删除:用的是遍历,会把后边的元素依次向前挪动一个位置,同时mArrayLength减1
public class CustonArray {
private int[] mArray;
private int mArrayLength;// 实际长度
public CustonArray(int max) {
mArray = new int[max];
mArrayLength = 0;
}
public int length() {
return mArray.length;
}
public int get(int index) {
return mArray[index];
}
public boolean find(int value) {
for (int i = 0; i < mArrayLength; i++) {
if (mArray[i] == value) {
return true;
}
}
System.out.println("未找到");// 这里是一种算法规范,即每次都要有提示
return false;
}
public void insert(int value) {
mArray[mArrayLength] = value;
mArrayLength++;
}
public void delete(int value) {
int i;
for (i = 0; i < mArrayLength; i++) {
if (mArray[i] == value) {
break;
}
}
if (i == mArrayLength) {
System.out.println("未找到");
return;
}
mArrayLength--;
for (; i < mArrayLength; i++) {
mArray[i] = mArray[i + 1];
}
}
}
注意:
1、private int mArrayLength;这种情况下是实际上mArrayLength已经有默认值了为0;
2、数组定义为int mArray[10];实际上这个数组中的数组元素的值默认为0;但是对于String mStringArray[10];这里面数组元素值为null
3、java中原有数组只给我们留得接口就是获取长度方法;根据下标获取对应的数组元素。
4、实际上java自带的数组是原始的数组。而我们需要的数组类型,有序,无序;重复,不重复。操作:查找,更新,插入,删除的基本操作。还有额外地遍历,排序等操作。决定这些操作快慢的核心实际上和存储、组织这些数据有巨大的关系。另外在过去对于一些获取数据结构长度时,实际是在插入数据中添加了一步长度自增操作,分担了一次性获取长度的速度。