Java 中集合转数组的方法
在 Java 中,将集合(如 List、Set)转换为数组有几种常见方法:
1. 使用 toArray()
方法(无参)
List<String> list = Arrays.asList("a", "b", "c");
Object[] array = list.toArray(); // 返回 Object[] 数组
特点:
• 返回的是 Object[] 数组
• 无法直接转换为特定类型的数组
2. 使用 toArray(T[] a)
方法(推荐)
List<String> list = Arrays.asList("a", "b", "c");
// 方式1:传入大小合适的数组
String[] array1 = list.toArray(new String[list.size()]);
// 方式2:传入空数组(Java 11+推荐)
String[] array2 = list.toArray(new String[0]);
特点:
• 可以指定返回的数组类型
• Java 11+ 推荐使用 toArray(new T[0])
,性能更好
• 如果传入的数组大小不足,会自动创建新数组
3. 使用 Java 8 Stream API
List<String> list = Arrays.asList("a", "b", "c");
String[] array = list.stream().toArray(String[]::new);
特点:
• 代码简洁
• 适用于 Java 8 及以上版本
4. 手动遍历转换
List<String> list = Arrays.asList("a", "b", "c");
String[] array = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i);
}
特点:
• 适用于需要特殊处理的场景
• 代码量较多
性能比较
方法 | 适用场景 | 性能 |
| 只需要 Object[] 时 | 快 |
| 已知集合大小时 | 快 |
| Java 11+ 通用方案 | 快(优化后) |
Stream API | Java 8+ 简洁代码 | 中等 |
手动遍历 | 需要特殊处理时 | 慢 |
最佳实践
- Java 11+:优先使用
collection.toArray(new T[0])
- Java 8:可以使用 Stream API 或
toArray(new T[size])
- 兼容性要求高:使用
toArray(new T[size])
注意事项
• 基本类型集合(如 List<Integer>
)转换为基本类型数组需要额外处理
• 转换后的数组是独立的副本,修改不会影响原集合(除非使用 Arrays.asList()
包装的列表)
示例(基本类型处理):
List<Integer> list = Arrays.asList(1, 2, 3);
int[] intArray = list.stream().mapToInt(Integer::intValue).toArray();