java如何从类数组自动转换为数组类
我想知道如何(如果可能的话)使用数据布局Array of Class
编程Java类,例如:
public class X{
double a;
double b;
double c;
}
public X array_of_x[SIZE] = new X [SIZE];
但在内部,数据将存储为Class of Arrays
的布局,如下所示:
public class X{
double a[] = new double [SIZE];
double b[] = new double [SIZE];
double c[] = new double [SIZE];
}
public X class_x = new X();
我的目标是,程序员可以像第一个那样以更直观的方式编程,但我会进行内部转换,以便数据在内存中保持连续,并获得更高的性能
有没有办法让它可以接受任何具有第一种结构类型的类,并将其转换为第二种方法?(或者是任何能够进行这种转换的工具)
# 1 楼答案
让我们创建一个展示第一个布局的接口,以及一个在内部使用第二个布局的接口实现。(从代码中删除访问修饰符。)
如果希望减轻GC的负担,还可以缓存
ContiguousX
的所有实例。如果在堆上分配ContiguousX
对象,那么它们很可能存在于堆栈中,这在很大程度上取决于JIT编译器的能力,在这种情况下,开销可以忽略不计。作为最后的手段,您可以为快速访问定义一个替代接口:通过对接口进行编程,您以后可以自由选择存储
为任何给定的类布局编写代码生成器相当简单。上面的代码可以用作样板文件,只有方法和数组声明依赖于您想要获得的类布局。我不知道任何现有的工具