【发布时间】:2011-02-16 16:39:04
【问题描述】:
我有一个浮点数组向量,即 Vector 。我想将其转换为一个浮点数组,即将向量中每个浮点 [] 中的每个元素移动到一个新的浮点 []。我对使用 Java 内置方法 vector.toArray() 来做到这一点有点困惑。有什么想法吗?
【问题讨论】:
标签: java vector type-conversion
我有一个浮点数组向量,即 Vector 。我想将其转换为一个浮点数组,即将向量中每个浮点 [] 中的每个元素移动到一个新的浮点 []。我对使用 Java 内置方法 vector.toArray() 来做到这一点有点困惑。有什么想法吗?
【问题讨论】:
标签: java vector type-conversion
有几种方法可以做到这一点。您可以调用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。
【讨论】:
Vector 的并发访问,那么是的,您可能希望将其保留为Vector。同步可能很昂贵,而且并不总是需要,这就是我建议ArrayList 的原因。这就像StringBuilder vs StringBuffer 问题。
Vector.toArray() 将为您提供一个数组数组,即二维数组。一旦你有了它,你可以迭代数组直到长度并将每个单独的数组复制到一个大数组中。
适合你吗?
【讨论】: