You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从C++转Java:如何创建复数类型的ArrayList

解决Java中用ArrayList创建复数列表的问题

嘿,我来帮你搞定这个问题!你的代码没法运行主要有两个关键原因,我一步步给你解释:

1. Apache Commons Math的Complex类不是泛型类

你在C++里用的complex<float>是模板类,可以指定浮点类型,但Apache Commons Math提供的Complex是一个具体类,它内部固定用double类型存储实部和虚部,根本不支持泛型参数(也就是不能写Complex<float>这种写法)。

2. Java泛型不支持基本类型

退一步说,就算有泛型复数类,Java泛型也不允许直接使用基本类型(比如float),必须用对应的包装类(比如Float)——不过这在你的场景里不是核心问题,核心是第一个点。

正确的Java实现代码

既然用的是Apache Commons Math的Complex,正确的写法应该是这样:

// 声明并初始化ArrayList,用于存储Complex对象
ArrayList<Complex> v1 = new ArrayList<>();

// 示例:向列表中添加一个实部为1.0、虚部为2.0的复数
v1.add(new Complex(1.0, 2.0));

和C++代码的对应关系

你在C++里用new vector<complex<float>>创建了一个动态分配的vector指针,而Java里的ArrayList是引用类型,直接new ArrayList<>()就完成了对象创建,不需要指针相关的语法。

如果确实需要单精度(float)复数怎么办?

如果你的业务场景必须用单精度浮点类型存储复数(而非Apache默认的double),那你需要自己实现一个FloatComplex类,比如:

class FloatComplex {
    private float real;
    private float imaginary;

    public FloatComplex(float real, float imaginary) {
        this.real = real;
        this.imaginary = imaginary;
    }

    // 可按需添加getter、setter或复数运算方法
    public float getReal() {
        return real;
    }

    public float getImaginary() {
        return imaginary;
    }
}

之后就可以用ArrayList<FloatComplex>创建列表了:

ArrayList<FloatComplex> v1 = new ArrayList<>();
v1.add(new FloatComplex(1.0f, 2.0f));

内容的提问来源于stack exchange,提问作者Grigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:19:07