在Java中,数组长度在创建时就已经固定,无法直接动态改变。但是,可以通过以下几种方式模拟动态数组的行为:
ArrayList
使用`ArrayList`类,它是一个动态数组,可以根据需要自动调整大小。
import java.util.ArrayList;ArrayListdynamicArray = new ArrayList<>(); // 添加元素dynamicArray.add(1);dynamicArray.add(2);// 获取当前大小int length = dynamicArray.size();
Arrays.copyOf()
使用`Arrays.copyOf()`方法创建一个新的数组副本,并指定新的长度。
import java.util.Arrays;int[] originalArray = {1, 2, 3, 4, 5};int[] newArray = Arrays.copyOf(originalArray, newSize);
LinkedList
使用`LinkedList`类,它是一个双向链表,可以高效地处理元素的添加和删除。
import java.util.LinkedList;LinkedListdynamicList = new LinkedList<>(); // 添加元素dynamicList.add(1);dynamicList.add(2);// 获取当前大小int length = dynamicList.size();
自定义动态数组类
可以通过继承`Object`类并实现相应的方法来自定义一个动态数组类。
public class DynamicArray{ private Object[] array;private int size;public DynamicArray(int initialCapacity) {array = new Object[initialCapacity];}public void add(T item) {if (size == array.length) {resizeArray(array.length * 2);}array[size++] = item;}private void resizeArray(int newSize) {Object[] newArray = new Object[newSize];System.arraycopy(array, 0, newArray, 0, size);array = newArray;}public int size() {return size;}}
请注意,以上方法都可以实现类似动态数组的功能,但它们各有优缺点。例如,`ArrayList`提供了方便的API,但可能会有额外的内存开销;`LinkedList`在插入和删除操作上更高效,但访问元素可能比数组慢。选择哪种方法取决于具体的应用场景和需求

