集合转数组,必须使用集合的toArray(T[] array),传入的是型完全一致、长度为0的空数组的原因:
说明:使用 toArray 带参方法,数组空间大小的 length:
1) 等于 0,动态创建与 size 相同的数组,性能最好。
2) 大于 0 但小于 size,重新创建大小等于 size 的数组,增加 GC 负担。
3) 等于 size,在高并发情况下,数组创建完成之后,size 正在变大的情况下,负面影响与 2 相同。
4) 大于 size,空间浪费,且在 size 处插入 null 值,存在 NPE 隐患。
测试1
public class Main81 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("123");
list.add("124");
list.add("125");
String[] r = list.toArray(new String[0]);
System.out.println(Arrays.toString(r));
}
}
11
[123, 124, 125]
1
测试2
public class Main81 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("123");
list.add("124");
list.add("125");
//此时小于size,会走扩容,有点浪费性能
String[] r = list.toArray(new String[1]);
System.out.println(Arrays.toString(r));
}
}
[123, 124, 125]
1
测试3
public class Main81 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("123");
list.add("124");
list.add("125");
//size大了,会有null
String[] r = list.toArray(new String[5]);
System.out.println(Arrays.toString(r));
}
}