1.数组可以干什么?
1)数组的唯一属性——长度,定义后,不可修改,有容量限制
2)下标,可以通过下标遍历数组中的元素
-增删查改
-反复增删查改后,不一定确切的知道存储的元素数量
3)可以定义多维数组
4)可以定义存储的数据类型
2.实现一个自己的动态数组
属性:
-长度
-下标
-元素个数
-存储数组
public class ArraylistDIY {
//属性:
//长度
int length;
//下标
int index;
//元素个数
int size;
//存储数组
Object [] Array={};
//是空数组,但不是空指针,不是null
构造方法:
-根据使用者传入的长度进行初始化,主要目的就是为了有一个初始容量
public ArraylistDIY(int initialCapacity){
//初始化容量,且保证输入的容量值不为负
if(initialCapacity<=0){
throw new IllegalArgumentException("初始化容量不成立");}
//在构造方法中为创建的对象初始化赋值
//根据初始化容量,初始化数组
length=initialCapacity;
//否则长度不会随容量的改变而改变
Array=new Object[initialCapacity];
// 相当于写Object ob2=new Object[];
// Array=ob2;
//初始化其他属性
//不能定义length,要保证length始终与容量是一致的
index=0;
size=0;
}
方法:
-add
public void add(Object ob){
//检测数组的容量是否大于等于数组的length
if(index>=length){
//需要创建一个length更大的数组
int newlength=length+(length>>1);
//改为原长的1.5倍
Object[]newArray=new Object[newlength];
//创建了一个新长度的空数组
//将旧数组中的数据取出来给到新数组
for(int q=0;q<length;q++){
newArray[q]=Array[q];
}
//替换数据
Array=newArray;
length=newlength;
}
Array[index]=ob;
index++;
size++;
}
-get
public Object get(int num){
Object obj=0;
//根据下标值获取,判断下标值是否超过length
if(num<length&&num>=0){
obj= Array [num];
}
else {
throw new ArrayIndexOutOfBoundsException("index超过范围");
}
return obj;
}
-remove
public void remove(int num){
//Object obj=0;
if(num<length&&num>=0){
Array[num]=null;
//obj=Array[num];
//obj是得到了一个地址
//obj=null;
//obj为空,但Array[num]不是
} else{
throw new ArrayIndexOutOfBoundsException("index超过范围");
}
}
-程序实现
public static void main(String[]args){
ArraylistDIY arraylistDIY=new ArraylistDIY(10);
//创建对象后,自动调用构造方法
for(int w=0;w<20;w++){
arraylistDIY.add("hello");}
arraylistDIY.remove(10);
Object a2= arraylistDIY.get(9);
System.out.println(a2);
}
}
问题集:
1.构造方法是什么
定义方式:[public] 构造方法名(参数){方法体}
构造方法名与类名一致,且没有返回值,不需要用void修饰
一个类中可以定义多个构造方法(参数要有区别)
作用:在构造方法中为创建的对象初始化赋值
在创建对象时系统会自动调用
2.数组初始化的目的及方法
目的:为数组中的数组元素分配内存空间,为每个数组元素赋值
java中的数组必须先初始化,然后才能使用
方法:动态初始化:初始化只指定数组长度,由系统为数组分配初始值
格式:数组类型[]数组名=new 数组类型[数组长度]