ArrayList面向对象(功能实现)
作者:互联网
主要是思路
ArrayList底层其实也就是个数组,所以我们需要定义一个(integers[]),数组的话就肯定会有一个长度(initialCapacity初始容量)(这俩个是肯定能想到的),有长度的话也并不行,因为我们的数组不一定存储多少个数据,所以需要有个变量记录个数(size)。
构造函数可以有无参和有参,因为我们的数组需要给初始容量赋值,所以我们的第一个无参构造函数就直接给了默认值,然后写我们的有参构造函数,传入初始容量赋值,但我们发现第一次写的无参构造函数和我们的有参构造函数很像,所以可以进行优化就有了我们第二个无参构造函数。
数组有俩个问题(我们提前解决一下):1.初始容量一旦定下来无法改变;2.索引问题
indexCheck()方法就负责检查我们的索引,不在我们的范围内就返回false
guaranteeCapacity(size)负责扩容,传入我们的size,size代表当前存储元素的个数,如果size+1大于capacity就说明我们的容量不足了,此时进行扩容(扩容System.arraycopy方法,就是创建一个新数组,然后把数组原来的数据复制到我们的新数组,再把新数组给我们的旧数组)
第一个add方法:在末尾添加一个元素,所以不需要检查索引只需要查看扩容问题。存储成功后size++
第二个add方法:在索引处添加元素,需要检查索引和扩容问题
System.arraycopy方法-src原数组 srcPos开始位置索引 dest木标数组 destPos目标数组开始索引 length长度
``` public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); ```点击查看全部代码-已进行实力测试,达到预期
package com.jr.learn0722.Demo1.test2;
//超级数组,其实也是使用数字实现的
public class SupArray {
Integer [] integers;
// 数组内拥有元素的个数
Integer size=0;
// 数组初始长度
Integer initialCapacity;
// 构造函数
// public SupArray(){
// initialCapacity=10;
// integers=new Integer[initialCapacity];
// }
public SupArray(){
this(5);
}
public SupArray(Integer initialCapacity){
integers=new Integer[initialCapacity];
this.initialCapacity=initialCapacity;
}
// 添加元素方法
public void add(Integer num){
guaranteeCapacity(size);
integers[size]=num;
size++;
}
public void add(Integer index,Integer num){
if (indexCheck(index)){
guaranteeCapacity(size);
System.arraycopy(integers,index,integers,index+1,size-index);
integers[index]=num;
size++;
}
}
public void delete(){
integers[size-1]=null;
size--;
}
public void delete(Integer index){
if (indexCheck(index)){
System.arraycopy(integers,index+1,integers,index,size-(index+1));
size--;
}
}
public void change(Integer index,Integer num){
if (indexCheck(index)){
integers[index-1]=num;
}
}
public Integer[] getIntegers() {
return integers;
}
public boolean indexCheck(Integer index){
return index>=0&&index<=size-1;
}
public void guaranteeCapacity(Integer size){
if (size+1>initialCapacity){
initialCapacity=initialCapacity+(initialCapacity>>1);
Integer [] integers1=new Integer[initialCapacity];
System.arraycopy(integers,0,integers1,0,size);
integers=integers1;
}
}
}
标签:index,功能,integers,ArrayList,initialCapacity,面向对象,Integer,public,size 来源: https://www.cnblogs.com/404tly/p/16512895.html