Java中List和Array互相转换

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值