資料結構是計算機存盤、組織資料的方式,
線性結構
線性表是具有n個相同型別元素的有限序列(n>=0)
常見的線性表有
陣列
鏈表
堆疊
佇列
哈希表
手動實作一個動態陣列:GitHub鏈接:https://github.com/iosKey/ArrayList
核心代碼:
1 //陣列使用,可以添加任何型別 2 ArrayList<Object> list3 = new ArrayList<>(); 3 list3.add(10); 4 list3.add(new Person(12, "Jack"));
/** * 在index位置插入一個元素 * @param index * @param element * * **/ public void add(int index,E element) { //判斷size是否合法 rangeCheckForAdd(index); //陣列擴容 ensureCapacity(size + 1); //如果插入的下標是2 那么4 3 2就要往后移 // for (int i = size - 1; i >= index; i--) { // elements[i + 1] = elements[i]; // } //第二種寫法 如果插入的下標是2 那么5 4 3往后移 for (int i = size; i > index; i--) { elements[i] = elements[i - 1]; } elements[index] = element; size++; }
/** * 查看元素的索引 * @param element * @return * * **/ public int indexOf(E element) { //既然陣列能存null 就要進行非null判斷 不然用null呼叫equals方法會報錯 if(element == null) { //回傳第一個null的下標 for (int i = 0; i < size; i++) { if (elements[i] == null) { return i; } } }else { for (int i = 0; i < size; i++) { //物件之間對比 Person類重寫equals方法 //Integer默認重寫了equals方法 是比較值的結果 if (element.equals(elements[i])) { return i; } } } return ELEMENT_NOT_FOUND; }
* 洗掉index位置的元素 * @param index * @return * * **/ public E remove(int index) { rangeCheck(index); E old = elements[index]; //例如要洗掉下標3 size是7 要移動的范圍就是4-6 //范圍是index后一位到size-1的數都往前移一格 //洗掉是小的下標先移動 for (int i = index + 1; i < size; i++) { //要插入的范圍是3到5 elements[i - 1] = elements[i]; } size--; //清空最后一個 清空6 elements[size] = null; return old; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/63640.html
標籤:其他
