java學習之—實現一個簡單的ArrayList
阿新 • • 發佈:2018-11-22
package thread1; /** * 實現一個簡單的ArrayList * * @Title: uminton */ public class SimpleArrayList<T> { //陣列中元素的大小 private Integer elementSize = 0; //建立SimpleArrayList時,陣列的容量,預設為16 private Integer arrayCapacity = 16; //當陣列容量不夠時,預設每次擴容的大小 private static final Integer DEFUALT_EXPAND_SIZE = 16; //元素容器 Object[] array = null; //無引數構造,設定預設容量 public SimpleArrayList(){ this(DEFUALT_EXPAND_SIZE); } /** * 有引數構造,建立容器,設定陣列大小 * @param arrayCapacity */ public SimpleArrayList(Integer arrayCapacity){ super(); if(arrayCapacity < 0){ throw new IllegalArgumentException("陣列空間越界"); } array = new Object[arrayCapacity]; this.arrayCapacity = arrayCapacity; } /** * 插入一個新元素,如果陣列可以放下,直接新增 * 如果陣列中放不下,擴容 * @param v */ public void add(T v){ //如果陣列可以放下,直接新增 if(elementSize < arrayCapacity){ array[elementSize++] = v; }else { //如果陣列放不下,擴容後再新增 arrayCapacity += DEFUALT_EXPAND_SIZE; //擴容 System.out.println("陣列放不下擴容:"+arrayCapacity); Object[] newArray = new Object[arrayCapacity]; //建立新的陣列 System.arraycopy(array,0,newArray,0,array.length); //拷貝資料到新的陣列 array = newArray; //從新的陣列賦值到原陣列 array[elementSize++] = v;//新增 } } /** * 根據指定下標查詢元素 * @param index * @return */ public T get(int index){ if(index > elementSize-1 || index < 0){ throw new ArrayIndexOutOfBoundsException(index); } return (T) array[index]; } /** * 刪除指定位置的元素,所有之後的元素需要前移 * @param index */ public void remove(int index){ if(index > elementSize-1 || index < 0){ throw new ArrayIndexOutOfBoundsException(index); } for (int i = index; i < elementSize-1; i++) { array[i] = array[i+1]; //覆蓋前一個數據 } elementSize--; } /** * 更新指定位置上的元素 * @param index * @param t */ public void update(int index,T t){ if(index > elementSize-1 || index < 0){ throw new ArrayIndexOutOfBoundsException(index); } array[index] = t; } /** * 返回array中元素的大小 * @return */ public Integer size(){ return elementSize; } public Integer capacity(){ return arrayCapacity; } public static void main(String[] args) { SimpleArrayList<Integer> list = new SimpleArrayList<>(); //新增 for (int i = 0; i < 20; i++) { list.add(i); } //遍歷 for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+" "); } //刪除index為10的元素 list.remove(10); for (int i = 0; i < list.size(); i++) { System.out.println("index:"+i+";value:"+list.get(i)); } System.out.println("size:" + list.size() + ",capacity:" + list.capacity()); } }