1. 程式人生 > >根據線性表演算法實現的ArrayList集合

根據線性表演算法實現的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;         } }