/**
* 重構自己的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() + ",");
}
}
}