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感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!