java如何定义动态
定义动态数组
在Java中,动态数组通常通过ArrayList类实现。ArrayList是List接口的一个可调整大小的数组实现,可以根据需要自动扩容。
import java.util.ArrayList;
// 创建一个动态数组
ArrayList<String> dynamicArray = new ArrayList<>();
// 添加元素
dynamicArray.add("元素1");
dynamicArray.add("元素2");
// 访问元素
String element = dynamicArray.get(0);
// 修改元素
dynamicArray.set(1, "新元素2");
// 删除元素
dynamicArray.remove(0);
// 获取数组大小
int size = dynamicArray.size();
使用泛型定义动态数组
ArrayList支持泛型,可以存储任意类型的对象。通过泛型可以确保类型安全。
ArrayList<Integer> intList = new ArrayList<>();
intList.add(123);
ArrayList<Double> doubleList = new ArrayList<>();
doubleList.add(3.14);
动态数组的初始容量
虽然ArrayList是动态的,但可以指定初始容量以提高性能,特别是在知道大致元素数量的情况下。
ArrayList<String> listWithCapacity = new ArrayList<>(100);
转换为静态数组
动态数组可以方便地转换为静态数组,这在某些需要固定大小数组的场合非常有用。

ArrayList<String> dynamicArray = new ArrayList<>();
dynamicArray.add("A");
dynamicArray.add("B");
String[] staticArray = dynamicArray.toArray(new String[0]);
动态数组的性能考虑
ArrayList在尾部添加元素的平均时间复杂度为O(1),但在中间插入或删除元素时为O(n),因为需要移动后续元素。随机访问的时间复杂度为O(1)。
对于频繁插入删除的场景,LinkedList可能更合适,它提供了O(1)时间复杂度的插入删除操作,但随机访问为O(n)。
线程安全的动态数组
标准ArrayList不是线程安全的。在多线程环境下,可以使用Collections.synchronizedList包装或考虑CopyOnWriteArrayList。

List<String> syncList = Collections.synchronizedList(new ArrayList<>());
Java 8+的流式操作
现代Java版本中,动态数组可以与Stream API结合,实现函数式编程操作。
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
List<Integer> squares = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList());
动态数组的常用方法
ArrayList提供了丰富的方法来操作动态数组:
add(E e):添加元素到末尾add(int index, E element):在指定位置插入元素remove(int index):删除指定位置元素clear():清空所有元素contains(Object o):检查是否包含某元素indexOf(Object o):查找元素索引subList(int from, int to):获取子列表
动态数组的遍历
有多种方式可以遍历动态数组:
// 传统for循环
for (int i = 0; i < list.size(); i++) {
String item = list.get(i);
}
// 增强for循环
for (String item : list) {
}
// 迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
}
// Java 8 forEach
list.forEach(item -> System.out.println(item));






