数组列表到 Java 中的字符串数组

2022-09-03 03:11:30
ArrayList<String> newArray = new ArrayList<String>();
newArray = urlList.getUrl();
for( int i = 0 ; i < newArray.size();i++)
{
    System.out.println(newArray.get(i));
}

newArray.toArray(mStrings );// is this correct 
mStrings = newArray.toArray();//  or this to convert ArrayList ot String array here

for( int i = 0 ; i < mStrings.length;i++)
{
    System.out.println(mStrings[i]);
}

编辑:当我尝试如下时,我得到空指针异常:

try
{
    newArray.toArray(mStrings );
    for(int i = 0 ; i < mStrings.length; i++)
    {
        System.out.println(mStrings[i]);
    }
} catch( NullPointerException e )
{
    System.out.println(e);
}

答案 1

通常我写

String[] array = collection.toArray(new String[collection.size()]);

因为这样

  1. 我得到一个我想要类型的数组。
  2. 在调用之前,我不必声明数组。Collection.toArray(T[])

答案 2

取决于您要执行的操作。两者都是正确的

toArray()返回一个数组,其中包含此列表中按正确顺序(从第一个元素到最后一个元素)的所有元素。

参考这里

toArray(T[] a)返回一个数组,其中包含此列表中所有元素的正确顺序(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则返回该数组。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。

参考这里

在以前,您希望获取一个数组。在后面,你有一个数组,你只是想填满它。

在你的情况下,第一种形式是首选,因为你只想得到一个数组,而不打扰大小或细节。


基本上,这是在第二种情况下发生的事情:

  1. 列表的大小是度量值。
  2. (a) 如果列表大小小于提供的数组的大小,则创建作为参数提供的类型的新 Array。

    (b)否则,列表将转储到指定的数组中。

这样做的唯一好处是避免了铸造。这两种形式是相同的。如果使用对象数组。即

     myList.toArray() <==> toArray(new Object[0])

现在,如果您传递一个未初始化的数组,您将获得一个 NullPointerException。最好的方法是:

 String[] y = x.toArray(new String[0]);

请阅读文档


推荐