Java数组和List转换中的误区

虽然数组和集合的转换我们开发中常用,但是下面我说明的这几点很多人平时都没有注意。

数组转集合

在数组转集合过程中,要特别注意是否使用了视图方式直接反悔了数组中数据。
以Arrays.asList()为例,它把数组转为集合后,不能使用集合相关方法,主要是add/remove/clear这几个修改集合长度的方法,否则会报UnsupportedOperationException异常。

public static void main(String[] args){
  String[] arr = new String[];
  arr[0]="one";
  arr[1]="two";
  arr[2]="three";
  List<String> list = Arrays.toList(arr);
  list.set(0,"oneList");
  system.out.println(arr[0]); //输出oneList
  //一下三个方法均会抛出异常
  list.add("four");
  list.remove();
  list.clear();
}

原因是Arrays.asList()用的是适配器模式,后台数据仍是原来的数组,所以修改集合值的时候,原有数组也会改变。asList()方法返回的是Arrays的内部类,这个内部类并未实现修改集合个数的方法。
Arrays.asList()源码如下

public static<T> List<T> asList<T...a>{
 return new ArrayList<>(a);
 }

一定要注意这个内部类的ArrayList并不是集合类中的那个ArrayList.具体的大家可以去看源码。

集合转数组

一定不要用list.toArray()无参方法接受结果。

Object[] arr = list.toArray();//原因是无参会使得泛型丢失,后续会有类型转化异常的问题

要用下面带参的,并且数组长度n一定要和list.size()一样,否则,不管是多了还是少了,都会影响执行效率。

T[] arr = new T[n];
T[] arrT = list.toArray(arr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值