数组和List相互转换(asList)

  • Array转List
String[] s = new String[]{"A", "B", "C", "D","E"};
List<String> list = Arrays.asList(s);

注意这里list里面的元素直接是s里面的元素,对s的修改,直接影响list;

s[0] ="AA";
System.out.println("list: " + list);
// list: [AA, B, C, D, E]
  • List转Array
String[] dest = list.toArray(new String[0]);	// new String[0]是指定返回数组的类型

这里dest里面的元素不是list里面的元素,对list中关于元素的修改,不会影响dest。

  • asList深入了解

一、为什么这里array转List后,修改array,list也会变化呢?
asList返回的确实是个ArrayList,但是这个并不是我们通常使用的java.util.ArrayList,它是Arrays类的静态内部类,是比较简单粗糙的类:
1、没有扩容机制
2、无法添加元素,调用add(E element)会抛异常
最根本的原因是这个内部类的E[] a是final的

所以如果要修改List的大小,我们需要创建一个真正的ArrayList

        String[] s = new String[]{"A", "B", "C", "D","E"};
        List<String> list = new ArrayList<>(Arrays.asList(s));

同样,这里list里面的元素是s里面元素的引用,如果数组不是基本数据类型的包装类,而是自定义类型,那么通过数组对元素的修改,list里面相应元素也会改变
二、将基本数据类型数据的数组作为参数

      int[] myArray = { 1, 2, 3 };
      List myList = Arrays.asList(myArray);
      System.out.println(myList.size());

这里打印的结果是1,myList里面只有一个元素,就是myArray,
这是因为,asList 方法的参数必须是对象或者对象数组,而原生数据类型不是对象,当传入一个原生数据类型数组时,asList 的真正得到的参数就不是数组中的元素,而是数组对象本身!此时List 的唯一元素就是这个数组。
正确做法应该使用包装类

      Integer[] myArray = { 1, 2, 3 };
      List myList = Arrays.asList(myArray);
      System.out.println(myList.size());
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值