自己實現數據結構---ArrayList
阿新 • • 發佈:2018-06-23
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 */ publicArrayList(){ this(10); } /** * 獲取數組中元素的個數 * @return */ public int getSize(){ return size; } /** * 獲取數組的容量 * @return */ public int getCapacity(){ return data.length; } /** * 判斷數組是否為空 * @return */ publicboolean 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