【集合】重構自己的ArrayList

 

/**
 * 重構自己的ArrayList
 * 完成的功能有:add、remove、get、size和iterator
 * @author LGQ
 *
 */
/**
 * 先定義一個MyList接口,內部定義要實現的功能
 */
public interface MyList {
	
	/**
	 * 增加一個<br>  
	 * 1.判斷集合是否已滿
	 * 2.沒滿,取當前下標,在當前位置加入一個
	 * @param o
	 * @return
	 */
	public void add(Object o);
	/**
	 * 刪除一個<br>
	 * 1.先循環遍歷找這個元素
	 * 2.找到後將後面的元素依次向前移動
	 * 
	 * @param o
	 */
	public void remove(Object o);
	/**
	 * 返回指定下標的元素<br>
	 * 1.是否爲空
	 * 2.找到待刪除元素的下標,接着從後向前依次進行覆蓋
	 * 3.元素個數減一
	 * @param index
	 * @return
	 */
	public Object get(int index);
	/**
	 * 通過迭代方法得到迭代器
	 * @return
	 */
	public Iterator iterator();
	/**
	 * 獲取元素的個數
	 * @return
	 */
	public int  size();
}
/**
 * 定義迭代器的規則
 * @author DELL
 *
 */
public interface Iterator {
	/**
	 * 判斷當前位置的下一個爲控制是否存在元素
	 * @return
	 */
	public boolean hasNext();
	/**
	 * 取得下一個位置的元素
	 * @return
	 */
	public Object next();
	/**
	 *刪除最後一個元素
	 */
	public void remove();
}
/**
 * 用MyArrayList去實現MyList,並提供具體的實現
 * @author DELL
 *
 */
public class MyArrayList implements MyList {
	
	//元素的個數
	private int size = 0;
	//定義對象數組
	private Object[] array = null;
	//默認的構造器
	public MyArrayList(){
		array = new Object[10];
	}
	//自定義的構造器
	public MyArrayList(int num){
		array = new Object[num];
	}	
	/**
	 * 遍歷測試的方法:完成
	 * 循環輸出
	 */
	public void print(MyArrayList list){
		for(Object o: array){
			System.out.print(o + ",");
		}
	}
	/**
	 * 判斷數組空間是否已滿
	 */	
	public void testArray(){		
		if(size == array.length){
			Object[] newArray = new Object[array.length + 10];
			System.arraycopy(array, 0, newArray, 0, array.length);
			array = newArray;
			newArray = null;		
			
		}
	}
	@Override
	public void add(Object o) {
		testArray();
		array[size] = o;
		size++;			
	}
	@Override
	public Object get(int index) {		
		if(index > 0 && index < size){
			return array[index];
		}else{
			System.out.println("輸入的下標有誤!");
			return null;
		}
	}
	@Override
	public Iterator iterator() {
		return new MyIterator();
	}
	@Override
	public void remove(Object o) {
		if(size == 0){
			System.out.println("集合爲空!!!");			
		}
		for(int i=0;i<size;i++){
			if(array[i].equals(o)){
				for(int j=i+1;j<size;j++){
					array[j-1] = array[j];					
				}	
				array[size-1] = null;
				size--;	
			} 
		}
		System.out.println("沒有這個元素");
	}		
	@Override
	public int size() {
		return size;
	}	
	public class MyIterator implements Iterator{
		int flag = -1;
		@Override
		public boolean hasNext() {		
			if(array[flag+1] != null){
				return true;
			}else{
				return false;
			}			 
		}
		@Override
		public Object next() {
			if(hasNext()){
				flag++;
				return array[flag];
			}
			return null;
		}
		@Override
		public void remove() {
			array[size-1] = null;
			size--;
		}		
	}
}
public class TestMyArrayList {
	public static void main(String[] args) {		
		
		MyArrayList list = new MyArrayList();
//		list.add(1);
//		list.add(2);
//		list.add(3);	
//		list.add(4);
//		list.add(5);
//		list.add(6);
//		list.add(7);
//		list.add(8);
//		list.add(9);
//		list.add(10);
		
//		System.out.println("list.get(2)==" + list.get(10));
		System.out.println("list.size==" + list.size());
		
//		list.print(list);	
		
		Iterator iter = list.iterator();
		while (iter.hasNext()) {
			System.out.print(iter.next() + ",");
		}
		
		list.remove(new Integer(9));
	 
		
//		System.out.println();
//		list.print(list);	
		
//		System.out.println();
//		System.out.println("list.size==" + list.size());			
		
		System.out.println("刪除之後..........");
		Iterator iter2 = list.iterator();
		while (iter2.hasNext()) {
			System.out.print(iter2.next() + ",");
		}
	}
}


 

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