《java基础》集合类的toArray方法你会用吗?

3 篇文章 0 订阅
本文探讨了Java集合类List的toArray()方法可能导致的ClassCastException,并介绍了其重载版本toArray(T[] a)的正确用法,以及注意事项,包括数组空间大小对性能的影响。
摘要由CSDN通过智能技术生成

toArray()方法

集合类的toArray()方法相信大家都不陌生,它的作用是将集合转换成数组。但是这个方法有一个弊端,当toArray()方法使用不当时会产生ClassCastException(类转换异常)。不知道大家遇到过没有。


下列代码就会产生异常:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("张三");
    list.add("李四");
    list.add("王五");
    // 下面这行代码就会产生类转换异常。
    String[] strArray = (String[]) list.toArray();
    for (String item : strArray) {
      System.out.println(item);
    }
}

如果使用toArray()转换数组,并且还想按原有的数据类型使用的话只能按下面这样了:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("张三");
    list.add("李四");
    list.add("王五");
    Object[] objArray = list.toArray();
    for (Object item : objArray) {
      System.out.println((String) item);
    }
}

其实有更好的解决方案,使用toArray()方法的兄弟(重载)方法toArray(T[] a)。

toArray(T[] a)方法


toArray(T[] a)方法,将集合根据入参的数据类型转换成对应的数组。该方法就可以完美的解决使用toArray()方法的弊端。

// toArray(T[] a)方法的使用。
public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("张三");
    list.add("李四");
    list.add("王五");
    // 传入一个String类型的数组。
    String[] strArray = list.toArray(new String[0]);
    for (String item : strArray) {
        System.out.println(item);
    }
}

注意入参数组空间大小的设置:

1、数组空间等于0时,将会动态的创建和集合size相同空间大小的数组,性能是最好的。
2、数组空间大于0但是小于size时,会重新创建大小等于集合size的数组,此时会增加GC的负担。
3、数组空间等于集合的size时,在普通情况下是没问题的,但是在高并发情况下,数组创建完成后,集合的size变大,此时影响跟第二条相同。
4、数组空间大于集合的size时,一方面会造成空间浪费,另一方面会在使用数组时产生空指针的异常。因为多出来的空间会存入null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值