我有一个 float 组 vector ,即 Vector 。我想将其转换为一个 float 组,即将 vector 内每个 float[] 中的每个元素移动到一个新的 float[] 中。我对使用 Java 内置方法 vector.toArray() 来执行此操作有点困惑。有什么想法吗?
最佳答案
有多种方法可以做到这一点。您可以调用 toArray() 来获取多个数组,然后将它们连接成一个大数组(Guava 有实用方法来执行此操作)。或者,您可以分配一个大数组,然后使用 System.arraycopy 将组件数组复制到大数组的适当部分。
这是后者的示例:
import java.util.*;
public class Flatten {
static float[] flatten(float[]... arrs) {
int L = 0;
for (float[] arr : arrs) {
L += arr.length;
}
float[] ret = new float[L];
int start = 0;
for (float[] arr : arrs) {
System.arraycopy(arr, 0, ret, start, arr.length);
start += arr.length;
}
return ret;
}
public static void main(String[] args) {
Vector<float[]> v = new Vector<float[]>();
v.add(new float[] { 1,2,3, });
v.add(new float[] { 4, });
v.add(new float[] { });
v.add(new float[] { 5,6, });
float[] flattened = flatten(v.toArray(new float[0][]));
System.out.println(Arrays.toString(flattened));
// prints "[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]"
}
}
与 Guava ,看起来您可以使用 Floats.concat(float[]...)
通过一行来完成此操作:
float[] flattened = Floats.concat(v.toArray(new float[0][]));
另请参阅
<小时/>还应该注意的是,除非您需要 Vector
的线程安全性,否则您应该使用 ArrayList
来代替。
另请参阅
关于java - 将数组 vector 转换为一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786262/