Java ArrayList连续的内存分配仅用于引用?

我想分配一个原始数据类型对象的数组列表,例如int,char等(不是数组,因为它将来会增长,可能不是线性的),但是需要存储在RAM(jvm管理堆)中的连续内存位置.但是自从我为ex的原始数据类型声明ArrayList以来.用于int的ArrayList,在内部jvm映射到ArrayList<整数>对象的类型.
 现在的问题是ArrayList保留对存储在jvm受管内存空间中不同位置的对象的连续引用.但是我最初的想法是要连续存储实际的数据对象,而不仅仅是参考!但是我不知道如何实现它?我能想到的一种解决方案是分配大型字节数组,从而创建一个连续的内存缓冲区存储!如果在2000个预分配的字节中存储了1000个int对象,开发人员需要管理如何获取一些int数据存储在101索引位置的此手动创建的缓冲区中(让我们说,如果我们建模为2个字节/ int)

对于复杂的数据类型,也希望具有相同的功能.尽管处理复杂对象的连续内存分配可能很困难,因为需要计算结构大小并预分配(structureSize *预期元素数)的字节缓冲区

我想不出任何其他有效的方法或解决方案来连续分配对象(原始/复杂>.有人可以帮助我吗?

解决方法:

没有任何一种解决方案可以满足您的要求.

如果要使用原始类型的类似数组的结构,则需要使用该原始类型的数组或包装该原始类型1的数组的某个类.如果尝试实现自定义类,则它不能是泛型的(在原始类型上),因为原始类型不能用作泛型类型参数.因此,它不能是ArrayList或从Collection派生的任何其他类型.

如果要使用引用类型的类似数组的结构,则可以使用数组或ArrayList.

简而言之,如果您不愿意使用包装器类型(整数等):

>您必须分别对待原始类型和非原始类型.
>最好(从API设计和类型安全的角度出发)分别对待各个原始类型.

假设地,您可以创建类似数组的类型,该类型实现任何原始类型的数组,具体取决于运行时参数.只需定义许多方法/重载即可获取/设置不同的原始类型.但是,那不是编译时类型安全的,而且API很难看……至少可以说.

使用ByteBuffer的想法与上面的想法基本相同……或更糟糕的是,如果您预期应用程序代码会在字节与概念“数组”基类型之间进行所有索引和编码/解码. (而且最好还是从byte []开始而不是从ByteBuffer开始.)

1-例如,其中一个Trove集合类.

上一篇:查询从“ UTF-8”世界到Java“ char”的读取字节


下一篇:Java-ByteBuffer或ArrayList?