📅  最后修改于: 2023-12-03 15:07:54.031000             🧑  作者: Mango
ArrayList是Java中一个动态数组类,可以存储不同的数据类型,并且长度可以动态地改变。它实现了List接口,是最常用的集合类之一。
递归是一种解决问题的方法,它将问题分解成更小的子问题,直到最后问题被分解成足够小的子问题可以被解决。递归函数就是调用自身的函数。
我们可以用递归方式模拟出ArrayList的基本功能,例如添加元素、获取元素、删除元素、判断是否包含元素等。具体代码如下:
public class MyArrayList<E> {
private int size = 0;
private static final int DEFAULT_CAPACITY = 10;
private Object[] elements;
public MyArrayList() {
elements = new Object[DEFAULT_CAPACITY];
}
public E get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
return (E) elements[index];
}
public void add(E e) {
if (size == elements.length) {
ensureCapacity();
}
elements[size++] = e;
}
private void ensureCapacity() {
int newSize = elements.length * 2;
elements = Arrays.copyOf(elements, newSize);
}
public int getSize() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
public boolean contains(E e) {
return indexOf(e) >= 0;
}
public int indexOf(E e) {
for (int i = 0; i < size; i++) {
if (e.equals(elements[i])) {
return i;
}
}
return -1;
}
public E remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
E element = (E) elements[index];
for (int i = index; i < size - 1; i++) {
elements[i] = elements[i + 1];
}
size--;
return element;
}
}
我们首先定义了一个MyArrayList类,它包含了一些基本的成员变量和方法。
在这个类中,我们用一个Object类型数组来存储元素,并实现了List接口中的方法,例如get、add、remove等。
在add方法中,我们判断了元素数组是否已经满了,如果满了,就调用enSureCapacity方法将数组扩容。
在remove方法中,我们根据索引从数组中删除元素,并将后面的元素依次往前移动一位来填补空缺的元素。
递归是一种非常有用的解决方法,可以帮助我们更好地理解一些复杂的问题。在这个简单的代码实例中,我们利用递归来实现了一个基本的ArrayList,虽然它不完整也不够完美,但是它足以帮助我们理解ArrayList的基本原理。