数组和List的互相转换

一. 数组转List

1.首先最容易想到的就是:

Arrays.asList(array);

但是看下生成的ArrayList对象 不是我们常用的集合类,而是Arrays里面的静态内部类,没有提供集合类的List增删,只能查改。

2.使用Colltions

		int[] res = new int[]{1,1,1,2,2,3};
		List list = new ArrayList<>();
		Collections.addAll(list,res);
		System.out.println(list.size());//输出:1
		int[] o = (int[]) list.get(0);
		System.out.println(Arrays.toString(o));

但是貌似还是不能处理 基本数据类型的数组 比如int 在创建List的时候不能直接指明泛型为基本数据类型,但是指明为Integer又会报红,如果不指明泛型默认为object 但是会直接把int数组全部加入list的第一个索引处.

1
[1, 1, 1, 2, 2, 3]

Process finished with exit code 0

所以这个方法还是对应引用类型的数组比较好.

3.使用java8特性 Steam APi (*******************可处理int 数组)

        int[] res = new int[]{1,1,1,2,2,3};
		List<Integer> list = Arrays.stream(res).boxed().collect(Collectors.toList());

调用了自动装箱方法,直接转成Integer类型的List;

二.List转数组

1.调用List的toArray(T[] a)方法

        List<String> list1 = new ArrayList<>();
		list1.add("aa");
		list1.add("bb");
		list1.add("cc");
		String[] strings = list1.toArray(new String[3]);
		System.out.println(Arrays.toString(strings)); //[aa, bb, cc]

这里还是不能处理Integer集合转为int数组,因为toArray方法需要指明泛型,只有引用类型才能,如果调用无参的toArray()方法就会生成Object[]
但是Objcet[]强转为Integer[]就好报错,类型转换异常,不能向下转型.

		List<Integer> list1 = new ArrayList<>();
		list1.add(1);
		list1.add(2);
		list1.add(2);
		Integer[] objects = (Integer[]) list1.toArray();
		System.out.println(Arrays.toString(objects));
		//Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

但是你可以调用有参的方法指定Integer[]。
补充:int 不算 引用类型 int[]算 所以List 可以通过toArray(new int[m][n])转为int[][]数组

2.使用java8特性 Steam APi (*******************可处理int 数组)

		List<Integer> list1 = new ArrayList<>();
		list1.add(1);
		list1.add(2);
		list1.add(2);
		int[] array = list1.stream().mapToInt(Integer::intValue).toArray();
		System.out.println(Arrays.toString(array));//[1, 2, 2]

调用Steam 需要映射为int 类型 然后才转为数组

三:总结

1.对于自己new 一个对象然后遍历去赋值,这个最简单的方法我没有讲,毕竟都知道,但是用起来代码太繁琐。
2.int数组和list的转换,比较麻烦,只能在Stream API中通用,List转数组,调用List类(对象即可)的stram()方法,数组转List 要调用数组(Arrays)的steam()方法;
3.对于引用类型的数组互转,上面方法都能用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值