date: 2025-02-19T21:25:40 title: java数组和List转换 author: zaqai tags:
- java
- 八股
数组转换为List
Arrays.asList()
Arrays.asList()
可以将数组直接转换为一个固定大小
的List
。注意,这个List
是List
接口的实现类,但不是ArrayList
。
String[] array = {"Apple", "Banana", "Cherry"};
// 使用 Arrays.asList() 转换为 List
List<String> list = Arrays.asList(array);
但是int数组不可以直接Arrays.asList(intArray)
, 需要先转成Integer数组
int[] intArray = {1, 2, 3, 4, 5};
Integer[] integerArray = Arrays.stream(intArray).boxed().toArray(Integer[]::new);
List<Integer> integerList = Arrays.asList(integerArray);
// 或者一步
List<Integer> integerList = Arrays.stream(intArray).boxed().collect(Collectors.toList());
integerList.add(1); // 不可修改的list, 此步骤运行会报错说不支持
Arrays.asList()
生成的List
是固定大小的,不能添加或删除元素。- 如果需要一个可修改的
List
,可以将其包装到ArrayList
中:List<String> modifiableList = new ArrayList<>(Arrays.asList(array));
List<int[]>转int[][]
List<int[]> res = new ArrayList<>();
res.toArray(new int[res.size()][])
Stream
String[] array = {"Apple", "Banana", "Cherry"};
// 使用 Stream API 转换为 List
List<String> list = Arrays.stream(array).collect(Collectors.toList());
List转换为数组
List.toArray()
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 将 List 转换为数组
String[] array = list.toArray(new String[0]); // 提供目标数组的类型
List Integer 转int数组
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
// 转换为 int[]
int[] array = list.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(array));
List.toArray(T[] a) 方法的原理
- 如果传入的数组足够大(即数组的长度大于或等于
List
的大小),List
的元素会被复制到这个数组中,多余的数组位置会被设置为null
。 - 如果传入的数组太小(即数组的长度小于
List
的大小),toArray
方法会自动创建一个新的数组,其大小等于List
的大小,并将元素复制到新数组中。
new String[0]
如果不指定类型,toArray 方法会返回一个 Object[] 类型的数组,而不是 String[] 由于传入的数组长度为0,显然不足以存储 List 的元素。因此,toArray 方法会自动创建一个新的数组,其大小等于 List 的大小,并将 List 的元素复制到这个新数组中。 也可以使用 new String[list.size()] 来创建一个足够大的数组,但这需要手动计算 list.size(),代码会稍微复杂一些:
Stream
String[] array = list.stream().toArray(String[]::new);
回复