Java 数组初始化后如何改变长度

在 Java 中,一旦数组被初始化,其长度是固定的,不能直接改变。然而,我们可以借助其他的方法来实现改变数组长度的效果。本文将通过给出一个具体问题来介绍如何改变数组长度的方案,并附带代码示例。

问题描述

假设我们需要实现一个动态扩容的数组,即在数组元素个数达到容量上限时,自动增加数组的长度,并将原有的元素复制到新的数组中。我们希望实现以下几个方法:

  • add(int element):向数组中添加元素,如果数组已满,则自动扩容;
  • get(int index):获取指定索引位置的元素;
  • size():获取数组的当前元素个数;
  • capacity():获取数组的当前容量。

解决方案

为了实现上述功能,我们可以采用以下步骤:

  1. 创建一个初始容量为 10 的数组作为底层数据结构;
  2. 维护一个变量 size,用于记录当前数组中的元素个数;
  3. 实现 add(int element) 方法,当 size == capacity 时,创建一个新的容量为原容量两倍的数组,并将原有元素复制到新数组中;
  4. 实现 get(int index) 方法,根据索引返回对应位置的元素;
  5. 实现 size() 方法,返回数组的当前元素个数,即 size
  6. 实现 capacity() 方法,返回数组的当前容量。

下面是具体的代码示例:

public class DynamicArray {
    private int[] array;
    private int size;

    public DynamicArray() {
        array = new int[10];
        size = 0;
    }

    public void add(int element) {
        if (size == array.length) {
            int[] newArray = new int[array.length * 2];
            System.arraycopy(array, 0, newArray, 0, size);
            array = newArray;
        }
        array[size] = element;
        size++;
    }

    public int get(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException();
        }
        return array[index];
    }

    public int size() {
        return size;
    }

    public int capacity() {
        return array.length;
    }
}

通过以上的代码实现,我们可以动态地向数组中添加元素,并在需要时自动扩容。下面是一个使用示例:

public class Main {
    public static void main(String[] args) {
        DynamicArray dynamicArray = new DynamicArray();
        dynamicArray.add(1);
        dynamicArray.add(2);
        dynamicArray.add(3);
        System.out.println("Size: " + dynamicArray.size());
        System.out.println("Capacity: " + dynamicArray.capacity());

        for (int i = 0; i < dynamicArray.size(); i++) {
            System.out.println("Element at index " + i + ": " + dynamicArray.get(i));
        }
    }
}

输出结果:

Size: 3
Capacity: 10
Element at index 0: 1
Element at index 1: 2
Element at index 2: 3

可以看到,当元素个数超过初始容量时,数组会自动扩容,并成功保存了添加的元素。

总结

通过上述的方案,我们成功地解决了如何改变 Java 数组的长度的问题。通过动态扩容的方式,我们能够在数组达到容量上限时自动增加数组的长度,并保留原有的元素。这种方法不仅适用于整型数组,对于其他类型的数组同样有效。在实际开发中,我们可以根据需要调整初始容量和扩容策略,以满足不同的需求。