📜  如何在Java实现我们自己的Dynamic Array类?(1)

📅  最后修改于: 2023-12-03 15:24:32.998000             🧑  作者: Mango

如何在Java实现我们自己的Dynamic Array类?

在Java中,我们可以使用数组来存储一组相同类型的数据。但是,数组的大小在创建时就已经确定了,不能动态地改变。如果我们需要一个动态大小的数组,就需要使用Dynamic Array。

Dynamic Array是一种可以在运行时动态地改变大小的数组。在Java中,它需要实现List接口。在本文中,我们将介绍如何在Java中实现我们自己的Dynamic Array类。

实现步骤

以下是实现Dynamic Array类的主要步骤:

  1. 定义Dynamic Array类,并实现List接口。
  2. 使用数组来存储Dynamic Array中的元素。
  3. 实现接口中未实现的方法,如add(),remove()和get()等。
  4. 实现动态调整数组大小的方法。

接下来将详细介绍这些步骤。

定义类和实现List接口

定义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接口中的方法

当我们实现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类。通过使用数组存储元素并动态调整数组的大小,我们可以创建一个灵活的数据结构,以存储任意类型和数量的元素。