JAVA容器 模擬ArrayList的底層實現

2021-09-12 09:53:52 字數 2874 閱讀 5134

arraylist實質上就是可變陣列的實現,著重理解:add、get、set、remove、iterator的實現,我們將關注一下問題。

1、建立arraylist的時候,預設給陣列的長度設定為10。

2、當set、remove、set的時候,如何解決越界問題?

3、當add的時候,如何解決擴容問題?

4、由於陣列是不可變的時候,我們需要頻繁重新新建陣列重新賦值。

1、arraylist定義變數與初始化。

//

定義儲存資料的陣列

private

transient

object elementdata;

//容量大小

private

intsize;

//預設構造器設定陣列長度為10

public

myarraylist()

public myarraylist(int

capacity)

elementdata=new

object[capacity];

}

2、解決越界問題:當索引值小於0或者索引值大於等於size就將越界。

public

void rangecheck(int

index)

}

3、解決擴容問題:普通擴容(new=old+old*2)、索引值依然大於普通擴容(new=index)、當超過int的取值範圍(int的最大範圍-8)

public

void ensurecapacity(int

mincapacity)

//當超過int的範圍的時候

if(mincapacity>integer.max_value-8)

object elments=new

object[newcapacity];

//建立新的陣列重新賦值。

system.arraycopy(elementdata,0,elments,0,size);

elementdata=elments;

}}

4、談談迭代器:hasnext():判斷是否有下乙個、next():當前游標指向的值、remove():刪除剛變過過的元素;

private

class iter implements

iterator

public

object next()

cursor=i+1;

return elementdata[lastret=i];

}public

void

remove()

myarraylist.

this

.remove(cursor);

cursor=lastret;

//當刪除乙個元素的時候,賦值為0

lastret=-1;

}}

5、我相信樂忠於理解原始碼的同學的基礎,弄清楚以上問題,應該arraylist就沒有問題了。

public

class myarraylist

public myarraylist(int

capacity)

elementdata=new

object[capacity];

}public e get(int

index)

public

void set(int

index, e element)

public

void

add(e e)

public

void add(int

index, e element)

//移除

public

void remove(int

index)

//判斷是否越界

public

void rangecheck(int

index)

}//擴容

public

void ensurecapacity(int

mincapacity)

//當超過int的範圍的時候

if(mincapacity>integer.max_value-8)

object elments=new

object[newcapacity];

//建立新的陣列重新賦值。

system.arraycopy(elementdata,0,elments,0,size);

elementdata=elments;}}

public

intsize()

public

iterator iterator()

private

class iter implements

iterator

public

object next()

cursor=i+1;

return elementdata[lastret=i];

}public

void

remove()

myarraylist.

this

.remove(cursor);

cursor=lastret;

//當刪除乙個元素的時候,賦值為0

lastret=-1;}}

public

static

void

main(string args)

}}

posted @

2017-03-16 19:10

邱勇aries 閱讀(

...)

編輯收藏

Java中的Vector與ArrayList的區別

首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。1 arraylist 是最常用的list實現類,內部是通過陣列實現的,它允許對元素進行快速隨機訪問。陣列的...

原始碼解析java集合框架,ArrayList原始碼

arraylist是list介面下的乙個實現類,arraylist是乙個動態陣列,底層資料結構為可以動態增長的陣列,相比陣列來說,arraylist可以動態的增加刪除元素,有成熟的擴容演算法。如圖,為arraylist資料結構,是乙個記憶體連續且緊湊的陣列。arraylist訪問元素時間複雜度為o ...

java 中模擬容器(二)

package com.iteritor public inte ce iteratorcollection介面 package com.iteritor public inte ce collection接著我們在arraylist中實現遍歷,在這兒我們在arraylist中新加入乙個內部類arr...