2023/7/12·数据结构之简单构造 ArrayList 和 LinkedList
1 · ArrayList的构造
1.1·原理
ArrayList底层就是一个数组,所以这里要还原一个ArrayList的话,就要在类中定义一个数组,当然这里不考虑泛型之类的,只是简单的做一下练习。
public class MyArrayList {
private Object[] arr;
}
1.2·方法
1.2.1·添加
然后添加第一个方法:添加方法add()
/**
* 添加
*
* @param obj 添加的变量
*/
public void add(Object obj) {
if (arr == null) {
//判断是否为第一次添加
arr = new Object[1];
arr[0] = obj;
} else {
Object[] newArr = new Object[arr.length + 1]; //定义用于替换的新数组
for (int i = 0; i < newArr.length; i++) {
//基于新数组长度遍历赋值
if (i != arr.length) {
//如果不是新数组的最后一个元素
newArr[i] = arr[i]; //直接对应赋值
} else {
newArr[i] = obj; //否则将最后一个元素赋值为添加的元素
}
}
arr = newArr; //替换原数组
}
}
1.2.2·遍历和集合大小
当然少不了测试用的show() 方法,以及之后会用到的size() 方法
public void show() {
for (Object obj : arr) {
System.out.print(obj + " ");
}
}
/**
* 集合大小
* @return 返回成员数
*/
public int size() {
return arr.length;
}
1.2.3·获取值
获取值的get() 方法
/**
* 获取值
* @param index 索引
* @return 返回的值
*/
public Object get(int index) {
if (index < 0 || index >= arr.length) {
System.out.println("没有该索引!");
return null;
}
return arr[index];
}
1.2.4·修改
修改值的set() 方法
/**
* 修改
*
* @param index 索引
* @param newObj 新变量
*/
public void set(int index, Object newObj) {
if (index < 0 || index >= arr.length) {
System.out.println("没有该索引!");
return;
}
arr[index] = newObj;
}
1.2.5·移除
最后是移除的remove() 方法
/**
* 移除(按索引)
*
* @param index 索引
*/
public void remove(int index) {
if (index < 0 || index >= arr.length) {
//判断索引是否合法
System.out.println("没有该索引!");
return;
}
Object[] newArr = new Object[arr.length - 1]; //定义用于替换的新数组
for (int i = 0; i < newArr.length; i++) {
//基于新数组长度遍历赋值
if (i < index) {
//如果新数组的索引小于要移除的索引
newArr[i] = arr[i]; //则对应赋值
} else {
newArr[