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就將越界。
publicvoid rangecheck(int
index)
}
3、解決擴容問題:普通擴容(new=old+old*2)、索引值依然大於普通擴容(new=index)、當超過int的取值範圍(int的最大範圍-8)
publicvoid 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():刪除剛變過過的元素;
privateclass 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就沒有問題了。
publicclass 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...