Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理大小未定义的数组_Java_Arrays_Arraylist - Fatal编程技术网

Java 处理大小未定义的数组

Java 处理大小未定义的数组,java,arrays,arraylist,Java,Arrays,Arraylist,我在做一个1D生产发电机。Im使用块来加载当前内容。我的问题是,我正在使用一个未定义大小的数组来存储数据。如果我使用ArrayList,它会在需要时创建一个新的数组来扩展它,但这不会产生垃圾吗 如果使用一个大尺寸的缓冲阵列,将数据存储到其中会更快吗。根据数据块的长度创建一个新数组并保存数据?如果您事先不知道数组的确切大小,那么您将以任何一种方式创建垃圾。您要么过度分配数组的大小,要么最终不得不分配一个新数组,从旧数组复制值并转储旧引用。不管怎样,都是垃圾,这就是ArrayList在内部的工作方式

我在做一个1D生产发电机。Im使用块来加载当前内容。我的问题是,我正在使用一个未定义大小的数组来存储数据。如果我使用ArrayList,它会在需要时创建一个新的数组来扩展它,但这不会产生垃圾吗


如果使用一个大尺寸的缓冲阵列,将数据存储到其中会更快吗。根据数据块的长度创建一个新数组并保存数据?

如果您事先不知道数组的确切大小,那么您将以任何一种方式创建垃圾。您要么过度分配数组的大小,要么最终不得不分配一个新数组,从旧数组复制值并转储旧引用。不管怎样,都是垃圾,这就是ArrayList在内部的工作方式。它实际上只是一个数组的
列表
包装器


FWIW,我认为你对这个问题想得太多了。对象数组就是引用数组。在初始化之前,数组中的任何项实际上都不会占用足够的空间来引用内存地址。

如果您事先不知道数组的确切大小,则会以任何方式创建垃圾。您要么过度分配数组的大小,要么最终不得不分配一个新数组,从旧数组复制值并转储旧引用。不管怎样,都是垃圾,这就是ArrayList在内部的工作方式。它实际上只是一个数组的
列表
包装器


FWIW,我认为你对这个问题想得太多了。对象数组就是引用数组。在初始化之前,数组中的任何项实际上都不会占用足够的空间来引用内存地址。

在GC要收集的其他内容中,“创建垃圾”是什么意思?未使用的预分配空间?是供GC收集。问题是大小可能从10到1000甚至更多。如果您需要动态/可变空间,那么使用像
ArrayList
这样的集合可能比使用数组更好。至于JVM决定增加大小时浪费的空间,当您要求可变大小时,这是不可避免的。@DarioKowalski我建议您使用ArrayList,但如果您有预期的最小大小,请将ArrayList实例化为该大小,以防止不必要的列表增长。如果您需要存储原语,我希望您可以(或者你很快就会意识到,
int!=java.lang.Integer
sizeof(Integer)>sizeof(int)
,还有一种叫做
boxing/unboxing
的原语类型。此外,还有许多第三方集合(动态扩展/收缩)来处理原语集合(高性能计算和高频交易者更喜欢使用的东西):类似或“创建垃圾”是什么意思与GC要收集的其他内容一样?预分配的未使用空间?是的,GC要收集。问题是大小可能从10到1000甚至更多。如果您需要动态/可变空间,那么使用像
ArrayList
这样的集合可能比数组更可取。至于JVM决定增加时浪费的空间减小大小,这是无法避免的,因为您要求使用可变大小。@DarioKowalski我建议使用ArrayList,但如果您有期望的最小大小,请将ArrayList实例化为该大小,以防止不必要的列表增长。如果您需要存储基元,我希望您可以(或者您很快就会成为)注意到
int!=java.lang.Integer
sizeof(Integer)>sizeof(int)
,还有一种叫做
装箱/拆箱的原语类型。另外,还有许多第三方集合(动态扩展/收缩)来处理原语集合(高性能计算和高频交易者更喜欢使用的东西):类似或