1 List to Array
1.1 toArray()方法,可以转为Object型Array,有弊端
List<String> list = new ArrayList<>();
list.add("abc");
Object[] array = list.toArray();
System.out.println(Arrays.toString(array));
[abc]
但上述方法存在强制转换时会抛异常
List<String> list = new ArrayList<>();
list.add("abc");
String[] array = list.toArray();
java: 不兼容的类型: java.lang.Object[]无法转换为java.lang.String[]
1.2 更推荐toArray(new 指定Array类型{})方法
List<String> list = new ArrayList<>();
list.add("abc");
String[] array=list.toArray(new String[]{});
System.out.println(Arrays.toString(array));
[abc]
1.3 List转基本类型Array只能先定义Array再循环赋值
List<Integer> list = new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
}};
int[] array = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
array[i] = list.get(i);
}
System.out.println(Arrays.toString(array));
[1, 2, 3]
2 Array to List
2.1 Arrays.asList(array),有弊端
String[] array = {"java", "c"};
List<String> list = Arrays.asList(array);
list.add("123");
System.out.println(list);
Exception in thread "main" java.lang.UnsupportedOperationException
因为返回的list是Arrays里面的一个静态内部类,该类并未实现add,remove方法,因此在使用时存在局限性。
// 注意该ArrayList并非java.util.ArrayList
// java.util.Arrays.ArrayList.ArrayList<T>(T[])
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
2.2 推荐结合ArrayList/LinkedList的构造方法:new ArrayList(Arrays.asList(array))
String[] array = {"java", "c"};
List<String> list = new ArrayList<>(Arrays.asList(array));
list.add("123");
System.out.println(list);
[java, c, 123]
2.3 还可以运用Collections.addAll(list, array)
String[] array = {"java", "c"};
List<String> list = new ArrayList<>();
Collections.addAll(list, array);
System.out.println(list);
[java, c]
2.4 基本类型Array转List只能先定义List再循环赋值
int[] array = new int[] {1, 2, 3};
List<Integer> list = new ArrayList<>();
for (int i : array) {
list.add(i);
}
System.out.println(list);
[1, 2, 3]