Java 中模仿源码自定义ArrayList
Java中模仿源码自定义ArrayList
最近看了下ArrayList的源码,抽空根据ArrayList的底层结构写了一个功能简单无泛型的自定义ArrayLsit,帮助自己更好理解ArrayList:,其实现的底层数据结构为数Object组,代码如下:
/**
*自己实现一个ArrayList
*
*/
publicclassMyArrayList{
privateObject[]elementData;
privateintsize;
publicintsize(){
returnsize;
}
publicbooleanisEmpty(){
returnsize==0;
}
//默认容量为10
publicMyArrayList(){
this(10);
}
/**
*自定义容量
*@paraminitialCapacity
*/
publicMyArrayList(intinitialCapacity){
if(initialCapacity<0){
try{
thrownewException();
}catch(Exceptione){
e.printStackTrace();
}
}
elementData=newObject[initialCapacity];
}
/**
*添加一个元素
*@paramobj
*/
publicvoidadd(Objectobj){
//数组扩容和数据的拷贝,重新new一个数组
if(size==elementData.length){
Object[]newArray=newObject[size*2+1];
System.arraycopy(elementData,0,newArray,0,elementData.length);
elementData=newArray;
}
elementData[size++]=obj;
//size++;
}
/**
*通过索引获取元素
*@paramindex
*@return
*/
publicObjectget(intindex){
rangeCheck(index);
returnelementData[index];
}
/**
*通过索引删除元素
*@paramindex
*/
publicvoidremove(intindex){
rangeCheck(index);
intnumMoved=size-index-1;
if(numMoved>0){
System.arraycopy(elementData,index+1,elementData,index,
numMoved);
}
elementData[--size]=null;//Letgcdoitswork
}
/**
*删除对应的元素(利用equal判断元素是否一致)
*@paramobj
*/
publicvoidremove(Objectobj){
for(inti=0;i=size){
try{
thrownewException();
}catch(Exceptione){
e.printStackTrace();
}
}
}
publicstaticvoidmain(String[]args){
MyArrayListlist=newMyArrayList(3);
list.add("333");
list.add("444");
list.add("5");
list.add("344433");
list.add("333");
list.add("333");
for(inti=0;i
测试结果:
333
444
5
344433
333
333
------------------------------
333
5
a
344433
333
333
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!