java - 将数组 vector 转换为一个数组

标签 java vector type-conversion

我有一个 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/

相关文章:

java - 以编程方式编辑/修改 .java 文件? (不是 .class 文件)

c++ - 逐行读取文本文件会使 vector 为空

php - 将字符串转换为 float PHP

不使用 atoi() 或 stoi() 的 C++ 字符串到 int

arrays - 将 float64 数组转换为 float32 数组

java - 如何在 Java 中迭代 CheckboxGroup?

java - Volley Change 响应超时 - 不要设置重复

c++ - std::vector emplace_back 可以从 vector 本身的元素复制构造吗?

java - SimpleDateFormat 小时字符串在某些*日期*上相差一。如何?为什么?

c++ - 在保持顺序的同时从 std::vector 中删除/删除重复元素的方法?