自己實現ArrayList

2021-08-29 05:15:33 字數 2317 閱讀 2282

我們已經學過了陣列了,但我們知道乙個事,陣列是定長的,定長的陣列顯然是滿足不了我們的需求的,因為我們不知道自己需要多長的陣列,所以只能定義的盡可能大,這樣就會造成極大的空間浪費。

那麼我們可不可以想個辦法去實現乙個不固定長度的容器呢?

這節課我就來帶大家實現乙個不固定長度的容器。

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。第一步 讓我們由簡單到難分布完成,...