我试图使用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中的异常
4 回答
Qyouu
TA贡献1786条经验 获得超11个赞
你应该阅读文档:
toArray(T[])
:以适当的顺序返回包含此列表中所有元素的数组(从第一个元素到最后一个元素)参数:a - 要存储此列表元素的数组(如果它足够大); 否则,为此目的分配相同运行时类型的新数组。
因此,返回的数组始终包含列表的所有元素,因为如果传递的数组小于列表的大小,则会创建新数组。
如果您需要创建一个只包含部分元素的数组,您可以使用List.subList()
:
String[] array = list.subList(0, 3).toArray(new String[3]);
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
这是因为toArray()
如有必要,会调整它的大小:
@SuppressWarnings("unchecked") public <T> T[] toArray(T[] a) { if (a.length < size) // Make a new array of a's runtime type, but my contents: return (T[]) Arrays.copyOf(elementData, size, a.getClass()); System.arraycopy(elementData, 0, a, 0, size); if (a.length > size) a[size] = null; return a; }
请注意该部分if (a.length < size)
,Array
如果您传递的部分不够大,它将调整大小。因此,最好写一下:
String[] str=al.toArray(new String[al.size()]);
添加回答
举报
0/150
提交
取消