數組的實現,核心是通過一個初始化的地址值、數組的長度、每個數組元素佔得字節數組成。【因此會發現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自帶的數組是原始的數組。而我們需要的數組類型,有序,無序;重複,不重複。操作:查找,更新,插入,刪除的基本操作。還有額外地遍歷,排序等操作。決定這些操作快慢的核心實際上和存儲、組織這些數據有巨大的關係。另外在過去對於一些獲取數據結構長度時,實際是在插入數據中添加了一步長度自增操作,分擔了一次性獲取長度的速度。