ArrayList的簡單實現

平流層發表於2021-02-21
class AList<E>{
	//屬性:陣列和實際元素個數
	private Object[] data;
	private int size;
	//建構函式:有參、無參
	public AList(int x){
		if(x<0)
			System.out.println("集合初始化異常,不正常的初始值");
		else
			data=new Object[x];
	}
	public AList(){
		this(10);
	}

	//size方法:返回實際元素個數
	public int size(){
		return size;
	}

	//add方法:新增元素,先判斷陣列空間是否滿了,滿->擴容,再新增
	public void add(E newData){
		if(size==data.length)
			data=Arrays.copyOf(data,size + (size >> 1));
		data[size++]=newData;
	}

	//get方法:獲取指定位置的元素,先對下表進行校驗
	public Object get(int index){
		if(index<0 || index>size-1)
			System.out.println("輸入的下標不準確,請重新輸入!");
		return data[index];
	}

	//remove方法:傳下標,先判斷下標是否越界
	public void remove(int index){
		if(index<0 || index>size-1)
			System.out.println("輸入的下標不準確,請重新輸入!");
		System.arraycopy(data,index+1,data,index,(size--) -(index+1));
	}

	//remove方法:傳下標,先判斷下標是否越界,對陣列進行迴圈遍歷,用equals判斷
		public void remove(Object obj){
			if(obj==null)
				System.out.println("刪除失敗,傳入元素不能為空");
			else{
				for(int i=0;i<size;i++){
					if(obj.equals(data[i])){
						remove(i);
					}
				}
			}
	}

	//contains方法:判斷陣列中是否含有傳入的引數
	public boolean contains(Object obj){
		for(int i=0;i<size;i++){
			if(obj.equals(data[i]))
				return true;
		}
		return false;
	}

	@Override
	public String toString(){
		StringBuffer str=new StringBuffer("[");
		for(int i=0;i<size;i++){
			if(i!=(size-1))
				str.append(data[i]).append(",");
			else
				str.append(data[i]);
		}
		return str+"]";
	}
}

相關文章