当前位置: 首页 > 后端技术 > Java

【数据结构与算法】——ArrayList

时间:2023-04-01 21:52:57 Java

1.什么是线性列表线性列表的概念以及LinkedList和ArrayList的区别可以参考上一篇文章。SegmentFaultBugkit下面我们来看看如何用Java实现ArrayList2。java实现的抽象类AbstractList和接口List也是我们自己定义的。如果需要查看完整代码,可以在文末查看Github中的完整代码。/***@param元素类型*@authorbugkit*@since2021.10.27*/publicclassArrayListextendsAbstractListimplementsList{//数组存储元素privateE[]数据;//元素的默认容量,最多只能容纳8个privateintcapacity=8;//创建一个容量为8的数组publicArrayList(){data=(E[])newObject[capacity];}//创建一个数组,其容量为传入参数的大小publicArrayList(intcapacity){this.capacity=capacity;数据=(E[])新对象[容量];}//获取数据数组中的第i个元素@OverridepublicEget(inti){if(i>=size){thrownewIndexOutOfBoundsException("Index"+i+"isoutofrange"+size);}返回数据[i];}//移除数据数组中的第i个元素@OverridepublicEremove(inti){if(i>=size){thrownewIndexOutOfBoundsException("Index"+i+"isoutofrange"+size);}Ee=数据[i];System.arraycopy(数据,i+1,数据,i,大小-i);尺寸-;返回e;}//在数据数组的第i个位置插入一个新元素,如果i大于当前元素个数,会报错数组越界@Overridepublicbooleanadd(Ee,inti){if(i>size){thrownewIndexOutOfBoundsException("Index"+i+"超出范围"+size);}if(size==capacity-1){resize();}if(size+1-i>=0)System.arraycopy(data,i,data,i+1,size+1-i);数据[i]=e;尺码++;返回真;}//向末尾添加元素@Overridepublicbooleanadd(Ee){returnadd(e,size);}//移除一个特定的元素,如果该元素存在,则移除该元素并返回true,否则返回false@Overridepublicbooleanremove(Ee){for(inti=0;i