在Java中,数组长度在创建时就已经固定,无法直接动态改变。但是,可以通过以下几种方式模拟动态数组的行为:
ArrayList
使用`ArrayList`类,它是一个动态数组,可以根据需要自动调整大小。
import java.util.ArrayList;
ArrayList
dynamicArray = 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;
LinkedList
dynamicList = 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`在插入和删除操作上更高效,但访问元素可能比数组慢。选择哪种方法取决于具体的应用场景和需求