我們已經學過了陣列了,但我們知道乙個事,陣列是定長的,定長的陣列顯然是滿足不了我們的需求的,因為我們不知道自己需要多長的陣列,所以只能定義的盡可能大,這樣就會造成極大的空間浪費。
那麼我們可不可以想個辦法去實現乙個不固定長度的容器呢?
這節課我就來帶大家實現乙個不固定長度的容器。
code:
/*** 我的陣列表
* 用陣列來儲存資料
*/public class myarraylist
//當然你我們也應該允許自定義容器長度
public myarraylist(int capital)
//定義乙個獲取myarraylist內儲存元素個數的方法
public int size()
//核心方法,新增元素
public void add(e e)
//這個其實不難,就是往陣列裡新增元素
values[size] = e;
size++;
}//擴容
private void expandcapital()
//讓values指向擴容後的陣列
values = newvalues;}}
//接下來我們需要有乙個獲取元素的方法
public e get(int index)
//有新增就要有刪除
/*** 刪除方法,刪掉index位置的元素,並返回被刪掉的元素
* @return
*/public e delete(int index)
//如果e為null
return null;
}//再來寫乙個修改
public void set(int index, e e)
}//最後寫乙個insert,在任意位置插入
public void insert(int index, e e)
values[index] = e;
return;}}
public boolean contains(e e)
}else
}return false;
}//注意,這裡必須new乙個新的陣列返回,因為我們不希望返回的陣列是values引用的陣列物件
public object toarray()
return newvalues;
}//將陣列複製到arr中,只不過這個傳入的陣列長度必須要足夠長
public void toarray(e arr)
for (int i = 0; i < size; i++)
}public static void main(string args)
//陣列下標越界了,但是我們希望我們可以新增任意個元素,怎麼辦呢?
//乙個想法是陣列擴容
system.out.println("新增100個元素後的表的長度:" + list.size());
//測試一下
system.out.println("第50個元素為:" + list.get(50));
system.out.println("第51個元素為:" + list.get(51));
system.out.println("我要刪除第50個元素啦");
list.delete(50);
system.out.println("現在第50個元素為:" + list.get(50));
system.out.println("現在表的長度為:" + list.size());
//可以很明顯的看到元素被刪除了
//試試可不可以
system.out.println("現在我要在表的第50位置插入48");
list.insert(50,48);
system.out.println("現在表的第50位置的元素為:" + list.get(50));
system.out.println("現在表的長度為:" + list.size());
//這就是動態陣列表的增刪改查
//最後再加點其他功能
system.out.println(list.contains(60));
object objects = list.toarray();
system.out.println(objects.length);
integer arr = new integer[30];
list.toarray(arr); //這樣就長度不夠
integer arr2 = new integer[200];
list.toarray(arr2);
system.out.println(arr2[0]); //這個就正常了}}
自己實現乙個簡單的ArrayList
自己簡單的實現arraylist的 註解很清楚了,寫了arraylist的add obj 方法 remove index 方法,get index 方法,自己定義迭代器,自己進行迭代 迭代器介面 public inte ce iterator集合 的實現 version description 自己...
ArrayList為什麼要自己實現迭代器
arraylist的父類abstractlist已經實現了iterator介面,為什麼arraylist還要自己實現iterator介面呢?arraylist實現iterator,是為了避免arraylist在迭代過程中陣列結構發生變化的而產生的問題,這個處理機制稱為fail fast機制,實際是乙...
手工實現ArrayList
思路 我們知道arraylist底層是陣列,所以當我們建立arraylist物件時就是呼叫空構造器,讓構造器來幫我們建立好乙個長度為10 自己擬定的長度 的陣列,然後我們可以呼叫內部提供的各種發放來操作arraylist,所以讓我們自己來手寫乙個arraylist。第一步 讓我們由簡單到難分布完成,...