Java 将包含字段的类的列表转换为多个数组的最快方法是什么-

Java 将包含字段的类的列表转换为多个数组的最快方法是什么-,java,arrays,list,Java,Arrays,List,我只想确认一下,这是否是将类数据字段转换为数组的唯一最快方法,或者可以做得更好 首先,我有一个名为Data的类,它包含很多字段。类Data被生成到一个名为selectedData的列表中,我想将Data中的所有字段提取到Float[]数组中 这能以更快的方式完成吗 //填充绘图的值 int selectedSamples=selectedData.size(); Float[]A0=新的Float[selectedSamples]; Float[]A1=新的Float[selectedSampl

我只想确认一下,这是否是将类
数据
字段转换为数组的唯一最快方法,或者可以做得更好

首先,我有一个名为
Data
的类,它包含很多字段。类
Data
被生成到一个名为
selectedData
列表中,我想将
Data
中的所有字段提取到
Float[]
数组中

这能以更快的方式完成吗

//填充绘图的值
int selectedSamples=selectedData.size();
Float[]A0=新的Float[selectedSamples];
Float[]A1=新的Float[selectedSamples];
Float[]A2=新的Float[selectedSamples];
Float[]A3=新的Float[selectedSamples];
Float[]SA0=新的Float[selectedSamples];
Float[]SA1=新的Float[selectedSamples];
Float[]SA1D=新的Float[selectedSamples];
Float[]SA2D=新的Float[selectedSamples];
Float[]SA3D=新的Float[selectedSamples];
Float[]PWM0=新的Float[selectedSamples];
Float[]PWM1=新的Float[selectedSamples];
Float[]PWM2=新的Float[selectedSamples];
Float[]PWM3=新的Float[所选样本];
Float[]PWM4=新的Float[selectedSamples];
Float[]PWM5=新的Float[selectedSamples];
Float[]PWM6=新的Float[selectedSamples];
Float[]PWM7=新的Float[selectedSamples];
Float[]PWM8=新的Float[selectedSamples];
Float[]DAC0=新的Float[selectedSamples];
Float[]DAC1=新的Float[selectedSamples];
Float[]DAC2=新的Float[selectedSamples];
对于(int i=0;i
编辑

这是一个替代方案吗

    SeriesThread a0Thread = new SeriesThread(selectedData, A0, "A0");
    a0Thread.start();
    SeriesThread a1Thread = new SeriesThread(selectedData, A1, "A1");
    a1Thread.start();
    SeriesThread a2Thread = new SeriesThread(selectedData, A2, "A2");
    a2Thread.start();
    SeriesThread a3Thread = new SeriesThread(selectedData, A3, "A3");
    a3Thread.start();
    SeriesThread sa0Thread = new SeriesThread(selectedData, SA0, "SA0");
    sa0Thread.start();
    SeriesThread sa1Thread = new SeriesThread(selectedData, SA1, "SA1");
    sa1Thread.start();
    SeriesThread sa1dThread = new SeriesThread(selectedData, SA1D, "SA1D");
    sa1dThread.start();
    SeriesThread sa2dThread = new SeriesThread(selectedData, SA2D, "SA2D");
    sa2dThread.start();
    SeriesThread sa3dThread = new SeriesThread(selectedData, SA3D, "SA3D");
    sa3dThread.start();
    SeriesThread pwm0Thread = new SeriesThread(selectedData, PWM0, "P0");
    pwm0Thread.start();
    SeriesThread pwm1Thread = new SeriesThread(selectedData, PWM1, "P1");
    pwm1Thread.start();
    SeriesThread pwm2Thread = new SeriesThread(selectedData, PWM2, "P2");
    pwm2Thread.start();
    SeriesThread pwm3Thread = new SeriesThread(selectedData, PWM3, "P3");
    pwm3Thread.start();
    SeriesThread pwm4Thread = new SeriesThread(selectedData, PWM4, "P4");
    pwm4Thread.start();
    SeriesThread pwm5Thread = new SeriesThread(selectedData, PWM5, "P5");
    pwm5Thread.start();
    SeriesThread pwm6Thread = new SeriesThread(selectedData, PWM6, "P6");
    pwm6Thread.start();
    SeriesThread pwm7Thread = new SeriesThread(selectedData, PWM7, "P7");
    pwm7Thread.start();
    SeriesThread pwm8Thread = new SeriesThread(selectedData, PWM8, "P8");
    pwm8Thread.start();
    SeriesThread dac0Thread = new SeriesThread(selectedData, DAC0, "D0");
    dac0Thread.start();
    SeriesThread dac1Thread = new SeriesThread(selectedData, DAC1, "D1");
    dac1Thread.start();
    SeriesThread dac2Thread = new SeriesThread(selectedData, DAC2, "D2");
    dac2Thread.start();
    // Wait until all threads are not alive
    while(a0Thread.isAlive() || 
            a1Thread.isAlive() || 
            a2Thread.isAlive() || 
            a3Thread.isAlive() ||
            sa0Thread.isAlive() || 
            sa1Thread.isAlive() || 
            sa1dThread.isAlive() || 
            sa2dThread.isAlive() || 
            sa3dThread.isAlive() || 
            pwm0Thread.isAlive() ||
            pwm1Thread.isAlive() ||
            pwm2Thread.isAlive() ||
            pwm3Thread.isAlive() ||
            pwm4Thread.isAlive() ||
            pwm5Thread.isAlive() ||
            pwm6Thread.isAlive() ||
            pwm7Thread.isAlive() ||
            pwm8Thread.isAlive() ||
            dac0Thread.isAlive() ||
            dac1Thread.isAlive() ||
            dac2Thread.isAlive()) {}
其中线程类为:

public class SeriesThread extends Thread {
    
    private List<Data> selectedData;
    private Float[] seriesData;
    private String fieldName;

    public SeriesThread(List<Data> selectedData, Float[] seriesData, String fieldName) {
        this.selectedData = selectedData;
        this.seriesData = seriesData;
        this.fieldName = fieldName;
    }

    @Override
    public void run() {
        int i = 0;
        switch(fieldName) {
        case "A0":
            for(Data data : selectedData)
                seriesData[i++] = data.getA0();
            break;
        case "A1":
            for(Data data : selectedData)
                seriesData[i++] = data.getA1();
            break;
        case "A2":
            for(Data data : selectedData)
                seriesData[i++] = data.getA2();
            break;
        case "A3":
            for(Data data : selectedData)
                seriesData[i++] = data.getA3();
            break;
        case "SA0":
            for(Data data : selectedData)
                seriesData[i++] = data.getSa0();
            break;
        case "SA1":
            for(Data data : selectedData)
                seriesData[i++] = data.getSa1();
            break;
        case "SAD1":
            for(Data data : selectedData)
                seriesData[i++] = data.getSa1d();
            break;
        case "SAD2":
            for(Data data : selectedData)
                seriesData[i++] = data.getSa2d();
            break;
        case "SAD3":
            for(Data data : selectedData)
                seriesData[i++] = data.getSa3d();
            break;
        case "P0":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP0();
            break;
        case "P1":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP1();
            break;
        case "P2":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP2();
            break;
        case "P3":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP3();
            break;
        case "P4":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP4();
            break;
        case "P5":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP5();
            break;
        case "P6":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP6();
            break;
        case "P7":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP7();
            break;
        case "P8":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getP8();
            break;
        case "D0":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getD0();
            break;
        case "D1":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getD1();
            break;
        case "D2":
            for(Data data : selectedData)
                seriesData[i++] = (float) data.getD2();
            break;
        
        }
    }
}
public类SeriesThread扩展线程{
私有列表选择数据;
私有浮动[]系列数据;
私有字符串字段名;
public seriestread(列出selectedData、Float[]seriesData、String字段名){
this.selectedData=selectedData;
this.seriesData=seriesData;
this.fieldName=字段名;
}
@凌驾
公开募捐{
int i=0;
交换机(字段名){
案例“A0”:
对于(数据:selectedData)
seriesData[i++]=data.getA0();
打破
案例“A1”:
对于(数据:selectedData)
seriesData[i++]=data.getA1();
打破
案例“A2”:
对于(数据:selectedData)
seriesData[i++]=data.getA2();
打破
案例“A3”:
对于(数据:selectedData)
seriesData[i++]=data.getA3();
打破
案例“SA0”:
对于(数据:selectedData)
seriesData[i++]=data.getSa0();
打破
案例“SA1”:
对于(数据:selectedData)
seriesData[i++]=data.getSa1();
打破
案例“SAD1”:
对于(数据:selectedData)
seriesData[i++]=data.getSa1d();
打破
案例“SAD2”:
对于(数据:selectedData)
seriesData[i++]=data.getSa2d();
打破
案例“SAD3”:
对于(数据:selectedData)
seriesData[i++]=data.getSa3d();
打破
案例“P0”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP0();
打破
案例“P1”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP1();
打破
案例“P2”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP2();
打破
案例“P3”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP3();
打破
案例“P4”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP4();
打破
案例“P5”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP5();
打破
案例“P6”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP6();
打破
案例“P7”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP7();
打破
案例“P8”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getP8();
打破
案例“D0”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getD0();
打破
案件“D1”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getD1();
打破
案件“D2”:
对于(数据:selectedData)
seriesData[i++]=(float)data.getD2();
打破
}
}
}

您可以使用反射(getCLass().getFields(),然后对它们进行迭代)-它会更通用,但不会更快。

我对100万个条目做了一个简单的测试。使用
Float[]
数组复制数据大约需要
2.5
秒。使用
float[]
数组大约花费了
.3个小时