数组与List之间的相互转换

数组与List之间的转换

一、List转换为数组

ArrayList转化Integer数组

  • 使用不带参数的toArray方法

ArrayList.toArray()方法返回的是Object数组,无法强转为对应的数组。

Object[] arr = arrayList.toArray();

例如,下面的例子就会报错

ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(111);
arrayList.add(666);
arrayList.add(999);
Integer[] nums = (Integer[]) arrayList.toArray();//报错
for (Integer num: nums){
   System.out.print(num+" ");
}
System.out.println();

上面的代码会报如下错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

不能将Object的数组直接强制转化为Integer的数组。
但是,我们可以将通过 ArrayList.toArray() 获取到的Object对象的数组,在遍历的时候进行强转(就是对单个数组元素进行强转)

ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(111);
arrayList.add(666);
arrayList.add(999);
Object[] objects = arrayList.toArray();//注意:这里不能直接强转为其他类型的数组
Integer[] nums = new Integer[objects.length];
for (int i = 0; i < objects.length; i++){
   nums[i] = (Integer) objects[i];
   System.out.print(nums[i]+" ");
}
System.out.println();
  • 使用带参数的toArray方法
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(111);
arrayList.add(666);
arrayList.add(999);
//ArrayList.toArray(T[])需要先实现定义好转化的数组对象类型,然后将ArrayList复制到该数组中
Integer[] nums = new Integer[arrayList.size()];
arrayList.toArray(nums);
for (Integer num: nums){
   System.out.print(num+" ");
}
System.out.println();

ArrayList转化为int数组

ArrayList.toArray(T [ ]): 其中 T[ ] 是对象数组,不是基本类型数组。

ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(111);
arrayList.add(666);
arrayList.add(999);
int[] nums = new int[arrayList.size()];
arrayList.toArray(nums);//报错

报错的原因是:因为 int[] 不等同于 Integer[] 这种对象数组。
在Java8之前,若非要转化为int[ ] 数组的话,只能用遍历ArrayList中的元素,进行循环赋值的方式。

ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(111);
arrayList.add(666);
arrayList.add(999);
int[] nums = new int[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++){
   //默认会调用intValue()方法,将Integer转化为int,即拆箱 ()
   nums[i] = arrayList.get(i);//arrayList.get(i).intValue()
   System.out.print(nums[i]+" ");
}
System.out.println();

Java8之后,则可以采用另外一种方法,即IntStream的方法,而不去循环赋值的方法。

ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(111);
arrayList.add(666);
arrayList.add(999);
int[] nums  = arrayList.stream().mapToInt(Integer::intValue).toArray();
for (int num : nums){
   System.out.print(num+" ");
}
System.out.println();

ArrayList转化为String数组

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Hello");
arrayList.add("Your");
arrayList.add("Time");
String[] strings = new String[arrayList.size()];
arrayList.toArray(strings);//ArrayList转化为String数组
for (String str:strings){
   System.out.print(str+" ");
}
System.out.println();
List<String> list = Arrays.asList(strings);//将String数组转化为List
System.out.println(list.get(2));

二、数组转化为List的方法

String数组转化为List

//strings为字符串数组
List<String> list = Arrays.asList(strings);//将String数组转化为List

Integer数组转化为List

//nums为Integer数组
List<Integer> list = Arrays.asList(nums);//将String数组转化为List

其他数组转化为List的方法,可以参考上面的方法。

参考:
java ArrayList原理及转化成数组常用方法
ArrayList如何转换为int[]数组
ArrayList转数组,数组与ArrayList互相转换
使用 java8 实现List到Array的转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值