ArrayList源碼實現

ArrayList其實就是一個Object數組,有下標索引,所以適合遍歷查找,如果是添加刪除,則會比較慢.

package com.array;
/**
 * 
 * <p>Title: MyArrayList</p>  
 * <p>Description: 模仿ArrayList源碼</p>  
 * @author 丁乾文  
 * @date 2019年2月21日
 * @version 1.0
 */
@SuppressWarnings("all")
public class MyArrayList<T> {
	/**
	 * 底層爲Object數組
	 */
	private Object[] arr;
	/**
	 * 集合大小
	 */
	private int size;
	/**
	 * 
	 * <p>Title: </p>  
	 * <p>Description: 初始化</p>
	 */
	public MyArrayList() {
		arr=new MyArrayList[0];
	}
	/**
	 * 
	 * <p>Title: size</p>  
	 * <p>Description:返回集合大小 </p>  
	 * @return
	 */
	public int size() {
		return size;
	}
	/**
	 * 
	 * <p>Title: get</p>  
	 * <p>Description: 獲取指定下標元素</p>  
	 * @param index
	 * @return
	 */
	public T get(int index) {
		return (T) arr[index];
	}
	/**
	 * 
	 * <p>Title: add</p>  
	 * <p>Description:添加一個元素 </p>  
	 * @param data
	 */
	public void add(T data) {
		Object[] newArr=new Object[arr.length+1];
		System.arraycopy(arr, 0, newArr, 0, arr.length);
		newArr[newArr.length-1]=data;
		arr=newArr;
		size++;
	}
	/**
	 * 
	 * <p>Title: add</p>  
	 * <p>Description:在指定位置添加元素 </p>  
	 * @param index
	 * @param data
	 */
	public void add(int index,T data) {
		if(index>size||index<0) {
			throw new ArrayIndexOutOfBoundsException();
		}
		Object[] newArr=new Object[arr.length+1];
		for (int i = 0; i < arr.length; i++) {
			if(i<index) {
				newArr[i]=arr[i];
			}else {
				newArr[i+1]=arr[i];
			}
		}
		newArr[index]=data;
		arr=newArr;
		size++;
	}
	/**
	 * 
	 * <p>Title: show</p>  
	 * <p>Description: 顯示所有元素</p>
	 */
	public void show() {
		for (int i = 0; i < arr.length; i++) {
			System.out.println("-->"+arr[i]);
		}
	}
	/**
	 * 
	 * <p>Title: remove</p>  
	 * <p>Description:刪除指定下標元素 </p>  
	 * @param index
	 */
	public void remove(int index) {
		Object[] newArr=new Object[arr.length-1];
		for (int i = 0; i < arr.length; i++) {
			if(i<index) {
				newArr[i]=arr[i];
			}else {
				newArr[i]=arr[i+1];
			}
		}
		arr=newArr;
		size--;
	}
	/**
	 * 
	 * <p>Title: remove</p>  
	 * <p>Description:刪除集合中指定對象 </p>  
	 * @param data
	 */
	public void remove(Object data) {
		for (int i = 0; i < arr.length; i++) {
			if(data.equals(arr[i])) {
				remove(i);
				break;
			}
		}
	}
	/**
	 * 
	 * <p>Title: clear</p>  
	 * <p>Description:清除集合中所有元素 </p>
	 */
	public void clear() {
		for (int i = 0; i < arr.length; i++) {
			arr[i]=null;
		}
		size=0;
	}
	/**
	 * 
	 * <p>Title: isEmpty</p>  
	 * <p>Description:判斷集合重是否爲null </p>  
	 * @return
	 */
	public boolean isEmpty() {
		return size==0;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章