问题:自定义链表实现增加元素、获取元素、获取链表长度功能。
import java.util.Arrays;
public class MyArrayList<E> {
//创建私有Object类型的数组
private Object[] old_arr;
//定义私有静态的初始长度为常量
private static final int DeFault_size = 3;
//定义私有实际长度
private int theSize;
//定义自定义链表的构造函数
public MyArrayList(){
//定义数组长度
this.old_arr = new Object[DeFault_size];
//实际长度初始值为0
theSize = 0;
}
//定义扩容函数
public void grow(int grow_size){
//判断是否扩容
if(theSize < grow_size){
//否,返回空值
return;
}
//创建新数组
Object[] new_arr = new Object[theSize * 2 +1];
//运用System类的移值方法,将就数组的元素移到新数组中
System.arraycopy(old_arr,0,new_arr,0,theSize);
//将新数组赋值给就数组,完成扩容
old_arr = new_arr;
}
//定义增加元素方法(含长度、数据的方法)
public void add(int index,E data){
//判断是否超出范围
if(index < 0 || index > theSize){
//是,抛出数组索引越界异常
throw new ArrayIndexOutOfBoundsException();
}
//添加元素要判断当前的数组是否要扩容
if(theSize == old_arr.length){
//扩容
grow(theSize);
}
for(int i = theSize;i > index;i--){
//元素后移
old_arr[i] = old_arr[i-1];
}
//给数组赋值
old_arr[index] = data;
theSize++;
}
//定义只包含数据的增加元素方法
public void add(E data){
//隐藏添加元素位置的属性
add(theSize,data);
}
//定义E返回类型的获取元素的方法
public E get(int index){
return (E)(old_arr[index]);
}
//定义int返回类型的获取链表长度函数
public int size(){
return theSize;
}
@Override
public String toString() {
return "MyArrayList{" +
"old_arr=" + Arrays.toString(old_arr) +
", theSize=" + theSize +
'}';
}
public static void main(String[] args) {
MyArrayList<String> list = new MyArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("陈六");
System.out.println(list.get(0));
}
}
1.主函数:
2.运行画面: