前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >list强转数组抛异常-ClassCastException

list强转数组抛异常-ClassCastException

原创
作者头像
用户1503405
修改2021-10-08 14:09:13
修改2021-10-08 14:09:13
50800
代码可运行
举报
文章被收录于专栏:棒棒小飞人棒棒小飞人
运行总次数:0
代码可运行
  • list强转数组抛异常-ClassCastException
代码语言:javascript
代码运行次数:0
运行
复制
 @Test
    //list强转数组抛异常-ClassCastException
    public void arrayError(){
        List<String> listToArray = new ArrayList<>();
        listToArray.add("jav");
        listToArray.add(0, "python");
        listToArray.add("php");
        listToArray.add("c#");
        String[] str = (String[]) listToArray.toArray();
         System.out.println(Arrays.toString(str));
    }

异常信息打印:

代码语言:javascript
代码运行次数:0
运行
复制
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
  • 对于toArray()无参方法其返回的是Object[],正确写法
代码语言:javascript
代码运行次数:0
运行
复制
@Test
    //list转数组,使用object对象接受再循环遍历转出
    public void arrayObject(){
        List<String> listToArray = new ArrayList<>();
        listToArray.add("jav");
        listToArray.add(0, "python");
        listToArray.add("php");
        listToArray.add("c#");
        String[] s = new String[listToArray.size()];
        Object[] o = listToArray.toArray();
        for (int i = 0; i < o.length; i++) {
            s[i] = o[i].toString();
        }
        System.out.println(Arrays.toString(s));
    }

输出:[python, java, php, c#]

  • 另外 T[] toArray(T[] a);
  • 输入参数为对应类型数组,那么应该建立多大的数组作为参数呢,推荐为0,例如我们的有一个List包含100w的数据

toArray(new String[0]), 创建一个大小为0的数组,当为输入数组长度小于集合size时,toArray方法会自动创建一个等大数组放入数据并返回。 toArray(new String[100000]),同上输入的10w数组比集合size小,toArray方法会重新创建一个等大数组放入数据并返回,原来的10w数组等于白建了 toArray(new String[1000000]),输入数组长度与集合size相等,当是一个理想状态时,即数组size没有发生变化(比如没有并发情况),那么toArray方法会直接使用输入数组并返回,但如果在输入数组创建之后,原集合size发生了变化,最糟糕的情况会退化为#2 toArray(new String[2000000]),输入数组长度大于集合size,那么toArray方法会直接使用输入数组并返回,当然多出去的那部分数组量就算浪费了

  • 最优化写法 推荐1:
代码语言:javascript
代码运行次数:0
运行
复制
@Test
    //list转数组-最优化写法
    public void OptimizeCode(){
        List<String> listToArray = new ArrayList<>();
        listToArray.add("jav");
        listToArray.add(0, "python");
        listToArray.add("php");
        listToArray.add("c#");
        String[] str = listToArray.toArray(new String[0]);
        System.out.println(Arrays.toString(str));
    }

输出:[python, java, php, c#]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档