根據線性表演算法實現的ArrayList集合
package study.struct.array;
import java.util.Arrays;
public class MyListTable { private Object[] elements = null;// private int size = 0;// 個數 // 動態初始化 public MyListTable() { this(10);//當不指定容量時,預設為10個 } public MyListTable(int initialCapacity) { //程式碼健壯性 if(initialCapacity < 0) { throw new IllegalArgumentException("容量不能為負數"); } elements = new Object[initialCapacity];// 初始化陣列容量 }
/* * 新增 */ public void add(Object ele) { /* * 滿了就要陣列擴容 */ if(size == elements.length) { Object[] temp = Arrays.copyOf(elements, elements.length * 2);//擴容機制乘以2 elements = temp; } elements[size] = ele; size++;//個數隨著新增的個數而增長 } /* * 列印 */ public String toString() { if (elements == null) { return "null"; } if (size == 0) { return "[]"; } StringBuilder str = new StringBuilder(size * 2 + 1); str.append("["); for (int i = 0; i < size; i++) { str.append(elements[i]); if(i!=size-1) {//判斷是否為最後一位 str.append(","); }else { str.append("]"); } } return str.toString(); } /* * 獲取指定球員,根據索引來取 */ public Object get(int index) { //程式碼健壯性 if(index < 0 || index >= size) { throw new IllegalArgumentException("索引越界"); } return elements[index]; } /* * 獲取指定球員的索引 */
public int getIndex(Object ele) { for (int i = 0; i < size; i++) { if(elements[i].equals(ele)) {//底層是equals此處別用==比較,Object有範圍 return i; } } return -1; } /* * 替換 */
public void set(int index, Object newele) { //程式碼健壯性 if(index < 0 || index >= size) { throw new IllegalArgumentException("索引越界"); } elements[index] = newele; } /* * 更新 */
public void update(Object oldele, Object newele) { int index = getIndex(oldele); if(index >= 0) { elements[index] = newele; } } /* * 按索引刪除 */
public void delete(int index) { for (int i = index; i < size -1; i++) { elements[i] = elements[i+1];//後面的元素前移動一位 } elements[size-1] = null;//最後一位設定為null size--;//陣列容量減1 } //陣列的大小 public int size() { return size; } //判斷元素是否為空 public boolean isEmpty() { return size == 0; } //清空 public void clear() { for (int i = 0; i < size; i++) { elements[i] = null; } size = 0; } }