将ArrayList <String>转换为String []数组

这个问题在这里已经有了答案:

  • 在Java 13中将'ArrayList <String>转换为'String []'的答案

  • 像这样使用。

    List<String> stockList = new ArrayList<String>();
    stockList.add("stock1");
    stockList.add("stock2");
    
    String[] stockArr = new String[stockList.size()];
    stockArr = stockList.toArray(stockArr);
    
    for(String s : stockArr)
        System.out.println(s);
    

    尝试这个

    String[] arr = list.toArray(new String[list.size()]);
    

    发生的事情是, stock_list.toArray()创建一个Object[]而不是String[] ,因此类型转换失败1。

    正确的代码是:

      String [] stockArr = stockList.toArray(new String[stockList.size()]);
    

    甚至

      String [] stockArr = stockList.toArray(new String[0]);
    

    (令人惊讶的是,最近的Java版本后者版本更快:请参阅https://stackoverflow.com/a/4042464/139985)

    有关更多详细信息,请参阅List.toArray的两个重载的List.toArray

    (从技术角度来看,此API行为/设计的原因是List<T>.toArray()方法的实现没有关于<T>在运行时的信息,它只知道原始元素类型是Object ;相反,在另一种情况下,数组参数给出了数组的基类型(如果提供的数组足够大,则使用它,否则将使用相同类型和更大尺寸的新数组作为结果分配并返回。)


    1 - 在Java中, Object[]String[]不是兼容的。 如果是这样,那么你可以这样做:

        Object[] objects = new Object[]{new Cat("fluffy")};
        Dog[] dogs = (Dog[]) objects;
        Dog d = dogs[0];     // Huh???
    

    这显然是无意义的,这就是为什么数组类型通常不兼容分配的原因。

    链接地址: http://www.djcxy.com/p/3365.html

    上一篇: Convert ArrayList<String> to String[] array

    下一篇: Converting 'ArrayList<String> to 'String[]' in Java