如果Set的元素足够大,则该数组将存储在其中。否则,将为此分配一个具有相同运行时类型的新数组。
Object []
toArray(),返回
Object[]不能转换为
String[]或任何其他类型数组的。
T [] toArray(T []
a),
返回包含此集合中所有元素的数组;
返回数组的运行时类型是指定数组的运行时类型。如果集合适合指定的数组,则将其返回。否则,将使用指定数组的运行时类型和此集合的大小分配一个新数组。
如果您执行了实施代码(我正在从OpenJDK中发布代码),那么您会很清楚:
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; }

![在Set toArray()方法中需要新的String [0] 在Set toArray()方法中需要新的String [0]](http://www.mshxw.com/aiimages/31/431058.png)
