自定义基于数组的容器,可以任意添加多个不同数据(ArrayList底层)
import java.util.Arrays;
/**
*创建一个基于数组的容器,可以放任意多个数据
* 思路: 1 定义一个初始容量
* 为了提高自定义性,可以把初始容量定义为空
* 创建有参构造 提供一个数组长度 然后在无参构造里调用有参构造的方法
* 2向外界提供一个可访问的添加方法
* 3考虑控制索引()
* 4此时要进行容量判断
* 当长度等于索引时,就满了
* (如果初始容量满了,就新建一个容量,(arrcopy)将上一个数组的元素赋值给新数组)
* 5将新的数组的地址值赋值给老数组,外界拿到的就是新数组的地址值了
* 6重写toString 方法(新的数组进行了扩容,但是只需显示添加的元素)
*/
public class AddArr2 {
//1 定义一个初始容量
Object[] arr=null;
//创建无参构造
public AddArr2() {
this(4);
}
//创建有参构造 给定一个长度
public AddArr2(int i) {
arr=new Object[i];
}
//定义一个变量存放索引
int size=0;
// 2向外界提供一个可访问的添加方法
public void add2(Object object) {
//3考虑控制索引()
//4判断容量,满了就创建新数组,再将旧数组的元素赋值给新数组
//当索引等于长度时即满
if (size==arr.length) {
//创建新数组,进行扩容
Object []newArr= new Object [arr.length*2];
//调用数组的复制方法
System.arraycopy(arr, 0, newArr, 0, arr.length);
//5将新的数组的地址值赋值给老数组
arr=newArr;
}
arr[size++]=object;
}
//重写toString
@Override
public String toString() {
//只需显示添加的元素即可 调用copyof方法
Object [] c2 = Arrays.copyOf(arr, size);
String str = Arrays.toString(c2);
return str;
}
}
测试类
public static void main(String[] args) {
//创建添加数组的对象
AddArr2 ad = new AddArr2();
//调用添加方法
ad.add2(3);
ad.add2(3);
ad.add2(3);
ad.add2(3);
ad.add2("添加");
ad.add2("任意类型数据");
ad.add2(true);
System.out.println(ad);//[3, 3, 3, 3, 添加, 任意类型数据, true]
}
}