集合和数组相互转换

本文详细介绍了Java中集合与数组之间的转换方法,包括List转数组、数组转List、List和Set的相互转换以及Set转数组的正确方式。强调了转换过程中需要注意的细节,如避免ClassCastException和UnsupportedOperationException异常。

集合(List)转数组

      【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全 一样的数组,大小就是 list.size()。 说  明:使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址;如果数组元素个数大于实际所需,下标为[ list.size() ] 的数组元素将被置为 null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集 合元素个数一致。正例:

List<String> list = new ArrayList<String>(2);
list.add("guan");
list.add("bao");
String[] array = new String[list.size()]; 
array = list.toArray(array); 

     反例:直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它 类型数组将出现 ClassCastException 错误

数组转集合(List)

使用Arrays中的asList方法,下边是阿里巴巴Java开发手册中的摘要:

  【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。 说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。 
    String[] str = new String[] { "you", "wu" };                                                                                                                                  List list = Arrays.asList(str);                                                                                                                                                      第一种情况:list.add("yangguanbao"); 运行时异常,下边是异常的原因                                                                                  第二种情况:str[0] = "gujin"; 那么 list.get(0)也会随之修改。 

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

  

List和Set相互装换

直接用构造方法就好了:

Set<String> set=new HashSet<>(list);
List<String> test=new ArrayList<>(set);

 

Set转数组同List

      List和Set都是Collection的孩子,而toArray是Collection的抽象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值