Vector <>类的toArray()方法

use*_*445 0 java arrays vector dynamic-arrays

A Vector 可以包含不同类型的对象.调用该toArray()方法是返回一个Object[]数组还是一个特定对象数组(例如Integer,Double)?我猜它不会返回特定的对象数组,因为数组只能有一种类型的对象.

是否有任何方法可以创建多个特定于对象的数组,具体取决于Vector?中包含的对象类型?

dka*_*zel 6

二者Vector以及任何Collection对象有2种方法:toArray()它返回Object[]toArray(T[])你必须提供正确类型的阵列.

如果你有一个这样的集合Integer将工作:

Vector<Integer> vector = ...
 Integer[] myInts = vector.toArray(new Integer[vector.size()]);
Run Code Online (Sandbox Code Playgroud)

请注意,我创建了一个矢量大小的数组.这实际上并不是必需的,但会加快速度,否则Java将不得不使用反射来计算类型并创建一个正确大小的数组.

如果您的Collection具有不同的不兼容类型的混合,并且您提供了一个不能用于存储它们的数组,那么JVM将在您调用时java.lang.ArrayStoreException运行时抛出toArray(array[])

    Vector<Object> vector = new Vector<>();
    vector.add(Integer.valueOf(2));
    vector.add(Double.valueOf(3.14));

    vector.toArray(new Integer[vector.size()]); //<-- throws ArrayStoreException
Run Code Online (Sandbox Code Playgroud)

但是,使用向量中的所有对象都可以兼容的对象数组是可以的.

这将同时起作用IntegerDouble扩展Number

Number[] myNumbers = vector.toArray(new Number[vector.size()]);
Run Code Online (Sandbox Code Playgroud)