Vector<>的toArray()方法类

时间:2014-12-01 18:49:46

标签: java arrays vector dynamic-arrays

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

是否有办法根据Vector中包含的对象类型创建多个特定于对象的数组?

2 个答案:

答案 0 :(得分:6)

Vector和任何Collection对象都有2个方法:toArray()返回Object[]toArray(T[]),您必须提供正确类型的数组

如果你有一个Integer的集合,这将有效:

Vector<Integer> vector = ...
 Integer[] myInts = vector.toArray(new Integer[vector.size()]);

请注意,我创建了一个矢量大小的数组。这实际上并不是必需的,但会加快速度,否则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

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

这将有效,因为IntegerDouble都延伸Number

Number[] myNumbers = vector.toArray(new Number[vector.size()]);

答案 1 :(得分:1)

因为你只能从方法返回1个对象,所以这样做的方法是创建一个ManyMap,使用该类对象的列表/数组索引每个对象的Class / p>