1. 程式人生 > >自己實現數據結構---ArrayList

自己實現數據結構---ArrayList

add pri set 方法 div data 開始 容量 cep

1.先上代碼:

public class ArrayList<E> {

    private E[] data;
    private int size;

    /**
     * 構造方法,初始化容量capacity
     * @param capacity
     */
    public ArrayList(int capacity){
        data = (E[]) new Object[capacity];
        size = 0;
    }

    /**
     * 默認的構造方法,默認capacity=10
     */
    public
ArrayList(){ this(10); } /** * 獲取數組中元素的個數 * @return */ public int getSize(){ return size; } /** * 獲取數組的容量 * @return */ public int getCapacity(){ return data.length; } /** * 判斷數組是否為空 * @return */ public
boolean isEmpty(){ return size == 0; } /** * 在第index位置插入一個新元素 * @param index * @param e */ public void add(int index,E e){ if(index < 0 || index > size){ throw new IllegalArgumentException("Add Failed"); } //擴容 if (size == data.length){ resize(
2*data.length); } //index後的元素都向後移動一位,註意:先移動後面的 for (int i = size; i > index;i--){ data[i+1] = data[i]; } data[index] = e; size++; } /** * 擴容 * @param newCapacity */ private void resize(int newCapacity){ E[] newData = (E[]) new Object[newCapacity]; for (int i = 0; i < size; i++){ newData[i] = data[i]; } data = newData; } /** * 向所有元素後添加一個新元素 * @param e */ public void addLast(E e){ add(size,e); } /** * 向所有元素前添加一個新元素 * @param e */ public void addFirst(E e){ add(0,e); } /** * 獲取index索引位置的元素 * @param index * @return */ public E get(int index){ if(index < 0 || index >= size){ throw new IllegalArgumentException("Get Failed"); } return data[index]; } /** * 修改index位置的元素 * @param index * @param e */ public void set(int index,E e){ if(index < 0 || index >= size){ throw new IllegalArgumentException("Get Failed"); } data[index] = e; } /** * 判斷數組中是否有元素e * @param e * @return */ public boolean contains(E e){ for (int i = 0; i < size; i++){ if(data[i].equals(e)){ return true; } } return false; } /** * 查找元素e在數組中的位置,不存在返回-1 * @param e * @return */ public int find(E e){ for (int i = 0; i < size; i++){ if(data[i].equals(e)){ return i; } } return -1; } /** * 從數組中刪除index位置的元素,返回刪除的元素 * @param index * @return */ public E remove(int index){ if(index < 0 || index >= size){ throw new IllegalArgumentException("remove Failed"); } E ret = data[index]; //刪除後,index後面的元素向前都移動一位,從index+1開始移動 for (int i = index+1; i < size; i++){ data[i-1] = data[i]; } size --; if(size == data.length/4 && data.length != 0){ resize(data.length/2); } return ret; } /** * 從數組中刪除第一個元素, * @return */ public E removeFirst(){ return remove(0); } /** * 從數組中刪除最後一個元素 * @return */ public E removeLast(){ return remove(size-1); } /** * 刪除數組中元素e * @param e */ public void removeElement(E e){ int index = find(e); if(index != -1){ remove(index); } } @Override public String toString() { StringBuilder res = new StringBuilder(); res.append(String.format("Array:size = %d, capacity = %d \n",size,data.length)); res.append(‘[‘); for (int i = 0; i < size; i++) { res.append(data[i]); if(i != size-1){ res.append(","); } } res.append(‘]‘); return res.toString(); } }

自己實現數據結構---ArrayList