当使用toArray()方法[保持]时,String的大小如何自动增加

我试图使用T [] toArray(T [] obj)将arrayList转换为数组。我传递的大小为0的字符串数组小于arrayList的大小。它应该抛出ArrayIndexOutOfBoundsException,但它正常工作并打印所有元素。字符串数组大小如何增加?


ArrayList<String> al=new ArrayList<>();

al.add("a");

al.add("b");

al.add("c");

String[] str=al.toArray(new String[0]);*//passing a string object of size 0*

for(String ele: str){

    System.out.println(ele);*//prints every elements in the arraylist*

}

预期结果:线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常


尚方宝剑之说
浏览 807回答 4
4回答

函数式编程

我不知道为什么你认为它应该抛出ArrayIndexOutOfBoundsException,因为文档说不然:如果列表适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型和此列表的大小分配新数组。

Qyouu

你应该阅读文档:toArray(T[]):以适当的顺序返回包含此列表中所有元素的数组(从第一个元素到最后一个元素)参数:a - 要存储此列表元素的数组(如果它足够大);&nbsp;否则,为此目的分配相同运行时类型的新数组。因此,返回的数组始终包含列表的所有元素,因为如果传递的数组小于列表的大小,则会创建新数组。如果您需要创建一个只包含部分元素的数组,您可以使用List.subList():String[]&nbsp;array&nbsp;=&nbsp;list.subList(0,&nbsp;3).toArray(new&nbsp;String[3]);

翻过高山走不出你

这是因为toArray()如有必要,会调整它的大小:@SuppressWarnings("unchecked") &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;<T>&nbsp;T[]&nbsp;toArray(T[]&nbsp;a)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a.length&nbsp;<&nbsp;size) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Make&nbsp;a&nbsp;new&nbsp;array&nbsp;of&nbsp;a's&nbsp;runtime&nbsp;type,&nbsp;but&nbsp;my&nbsp;contents: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(T[])&nbsp;Arrays.copyOf(elementData,&nbsp;size,&nbsp;a.getClass()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(elementData,&nbsp;0,&nbsp;a,&nbsp;0,&nbsp;size); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a.length&nbsp;>&nbsp;size) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[size]&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;}请注意该部分if (a.length < size),Array如果您传递的部分不够大,它将调整大小。因此,最好写一下:String[]&nbsp;str=al.toArray(new&nbsp;String[al.size()]);

跃然一笑

来自文档:以适当的顺序返回包含此列表中所有元素的数组(从第一个元素到最后一个元素);&nbsp;返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型和此列表的大小分配新数组。换句话说,如果元素不适合给定的元素,它会创建一个新数组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java