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个小时