📅  最后修改于: 2023-12-03 15:24:32.998000             🧑  作者: Mango
在Java中,我们可以使用数组来存储一组相同类型的数据。但是,数组的大小在创建时就已经确定了,不能动态地改变。如果我们需要一个动态大小的数组,就需要使用Dynamic Array。
Dynamic Array是一种可以在运行时动态地改变大小的数组。在Java中,它需要实现List接口。在本文中,我们将介绍如何在Java中实现我们自己的Dynamic Array类。
以下是实现Dynamic Array类的主要步骤:
接下来将详细介绍这些步骤。
定义Dynamic Array类并实现List接口的代码如下:
public class DynamicArray<E> implements List<E> {
private E[] arr;
}
在这个示例中,Dynamic Array类接受类型参数E,这意味着它可以存储任何类型的数据。使用泛型,我们可以保证类型安全并避免由于类型错误引起的问题。
我们还定义了一个私有成员变量arr来存储Dynamic Array中的元素。由于我们使用数组来实现Dynamic Array,因此arr也是一个数组。
在构造函数中,我们需要为数组分配内存:
public DynamicArray() {
arr = (E[]) new Object[0];
}
这会创建一个空数组,其大小为0。在添加元素时,我们需要动态地调整数组的大小。
当我们实现List接口时,必须实现add(),remove()和get()方法等。
@Override
public boolean add(E element) {
ensureCapacity(size + 1);
arr[size++] = element;
return true;
}
@Override
public E remove(int index) {
if (index >= size) {
throw new IndexOutOfBoundsException();
}
E result = arr[index];
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(arr, index + 1, arr, index, numMoved);
}
arr[--size] = null;
return result;
}
@Override
public E get(int index) {
if (index >= size) {
throw new IndexOutOfBoundsException();
}
return arr[index];
}
上述代码中,我们使用了ensureCapacity()方法来确保数组的大小足够存储新的元素。
在remove()方法中,我们使用System.arraycopy()方法移动元素,以便删除指定的元素。
为了确保Dynamic Array在添加和删除元素时具有动态性,我们需要实现一个方法来动态调整数组的大小。以下是动态调整数组大小的代码示例:
private void ensureCapacity(int minCapacity) {
int oldCapacity = arr.length;
if (minCapacity > oldCapacity) {
int newCapacity = oldCapacity == 0 ? 1 : oldCapacity * 2;
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
arr = Arrays.copyOf(arr, newCapacity);
}
}
在这个示例中,我们首先获取数组的当前大小,并根据需要将其扩展为两倍。当数组大小不足时,我们将其扩展为至少为所需大小,以便可以存储新的元素。
在本文中,我们介绍了如何在Java中实现我们自己的Dynamic Array类。通过使用数组存储元素并动态调整数组的大小,我们可以创建一个灵活的数据结构,以存储任意类型和数量的元素。