package Arraylist;
import java.lang.reflect.Array;
/**
* 1 写一个类,有属性和方法
* 2 各种方法,
* **/
public class Arraylist {
Object[] array;//数组在这里定义,然而并没有赋值,在构造方法初始化的时候创建新的数组,然后传值给这个变量。
//在其他的方法里面依然可以重新建立数组然后赋值给这个全局变量,走出方法新建的数组就会失效,值已经备份给全局变量了
private static int size=0;
public Arraylist(int a) {
array=new Object[a];
}
public Arraylist() {
this(5);//this 关键字代表这个类本身,5实现传值,实例化的时候插进去一个值
}
/**
*
*
* 1 类里面有一个Object数组,
* 2 添加元素的时候,往数组里面添加就可以了。
* 3 数组长度是10
* 4 如果满了,那么让数组长度+1.
* 1)有一个数组类型的全局变量,
* 2) new的时候初始化赋值。如果不赋值,那么默认的是创建一个5个长度的数组
* 3)如果数组满了,那么在方法里面创建一个新的数组,把旧的数组复制到新的数组里面
* 4)在方法里面把新的数组赋值给一个数组变量,全局变量(这里的技巧就是在这,你可以创建数组然后把数组赋值给一个数组类型的全局变量
* 也就是说数组定义和数组创建是分开的,)
* 5)当走出方法的时候,新数组名称失效,新数组也失效。但是新数组的备份了一份给全局变量数组,这个时候就起到了更新长度的作用。
*
* **/
public void add(Object obj) {
if(size>=array.length) {//判断是不是满了
int size1= size;
Object[] newarray=new Object[size1+1];//新建数组
for(int i=0;i<array.length;i++) {//旧的数组拷贝到新的数组里面
newarray[i]=array[i];
}
newarray[size]=obj;//把新的元素添加到新的数组里面
array=newarray;//这里是两个参数互相赋值
/**
* 注意
* array=newarray;
* 代表吧newarray的值赋给全局变量array。
*
* Object[] array=newarray;
* 代表新建了一个变量array(成员变量)把一个成员变量的值赋给另外的一个成员变量
*
* 当在方法里用自定义的格式定义了一个和全局变量重名的变量的时候
*
* **/
}else {
array[size]=obj;
}
size++;
}
public Object get(int index) {
return array[index];
}
public int length() {//定义的数组的长度
return array.length;
}
public int size() {//容器里面的元素的个数。
return size;
}
public static void main(String[] args) {
Arraylist a=new Arraylist();
a.add(1);
a.add(2);
a.add(2);
a.add(2);
a.add(3);
a.add(4);
for(int i=0;i<a.size();i++) {
System.out.println(a.get(i));
}
System.out.println("---------------------"+a.size());
System.out.println("---------------------"+a.length());
}
}
自己实现arraylist容器
猜你喜欢
转载自blog.csdn.net/qq_38296051/article/details/80512752
今日推荐
周排行