了解数据结构–自定义数组集合
其中包含添加, 查找, 遍历, 扩容, 索引越界检查功能
import java.util.function.Consumer;
/**
* @author xinruoxiangyang9010
*/
public class MyArrayList<T> {
private int size = 0;
private int capacity = 10;
private Object[] array;
/**
* 构造方法
*/
public <T> MyArrayList() {
array = new Object[capacity];
}
/**
* 新增元素的方法
*/
public void add(T element) {
add(size, element);
}
/**
* 遍历
*/
public void forEach(Consumer<T> consumer) {
for (int i = 0; i < size; i++) {
consumer.accept((T) array[i]);
}
}
public void add(int index, Object element) {
// 校验是否需要扩容
checkRange(index);
checkAndGrow();
// 根据要添加的位置, 移动后续的元素到新位置
if (index >= 0 && index < size) {
System.arraycopy(array, index, array, index + 1, size - index);
}
// 将元素添加到对应的位置
array[index] = element;
size++;
}
/**
* 根据素银获取元素的方法
*/
public T getEle(int index) {
checkRange(index);
return (T) array[index];
}
/**
* 校验是否需要扩容
*/
private void checkAndGrow() {
if (size == capacity) {
// 增加容量大小
capacity += capacity >> 1;
// 复制元素到新容量的容器
Object[] newArray = new Object[capacity];
System.arraycopy(array, 0, newArray, 0, size);
array = newArray;
}
}
private void checkRange(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("索引越界异常");
}
}
}