Java 在调试模式下,我可以看到额外的数组列表元素,并初始化为零

Java 在调试模式下,我可以看到额外的数组列表元素,并初始化为零,java,jdbc,arraylist,Java,Jdbc,Arraylist,我使用简单的jdbc调用从数据库中获取一些数据,当我调试我的应用程序时,它会显示一些空的额外记录 我的列表的实际大小应该是138,但它的数组大小初始化为171 当我使用名为LDCBeanCollection的集合时,它扩展了ArrayList并实现了BaseDTO,BaseDTO是可序列化的 公共类LDCBeanCollection将ArrayList实现BaseDTO扩展为 为什么会出现这个问题。我错过什么了吗 我怎样才能克服这个问题 ArrayList在内部管理通常大于当前大小的备份阵列。由

我使用简单的jdbc调用从数据库中获取一些数据,当我调试我的应用程序时,它会显示一些空的额外记录

我的列表的实际大小应该是138,但它的数组大小初始化为171

当我使用名为LDCBeanCollection的集合时,它扩展了ArrayList并实现了BaseDTO,BaseDTO是可序列化的

公共类LDCBeanCollection将ArrayList实现BaseDTO扩展为

为什么会出现这个问题。我错过什么了吗

我怎样才能克服这个问题

ArrayList在内部管理通常大于当前大小的备份阵列。由于ArrayList是一个可变长度的列表,因此数组大小是在内部管理的,因此不必在每次添加元素时重新分配。那将非常昂贵。当列表溢出时,您会添加更多当前适合备份阵列大小的元素,这些元素的增量为原始大小的1.5倍,以便将来扩展

换句话说,在备份数组的末尾几乎总是有额外的未使用元素,并且每个条目只消耗一个引用


如果你担心额外的元素,不要担心。该类管理事物,因此它们永远不会被视为列表的一部分。

列表的大小!=基本上是数组的大小。谢谢Jon-它会影响我的应用程序的性能吗?如果我获取更多的记录,比如数千或10万条记录,它只会占用一些额外的内存,但数组的每个备用元素只需要4或8个字节,这样做可以节省大量的拷贝。值得注意的是,lakh是一个在大多数英语国家都不使用的术语。我知道你的意思,但你可能希望在堆栈溢出上把它解释成成百上千。@ahishraaj。。。此空值是由于arraylist的加载因子引起的。我认为您应该阅读有关负载因子的内容,您自己肯定会理解的。非常感谢:它会影响我的应用程序的性能吗?如果我获取了更多的记录,比如以千或十万为单位。大小不会加倍,而是增加1.5倍于原始数组长度。啊。在过去的某个时候曾经是双重的。突出的一点是,增长是几何增长。感谢您添加grepcode链接。Grepcode是一个极其宝贵的资源:-@ashishraaj。。是的,它会影响性能。您最后应该做的是arraylist.trimToSize@该死的,不,这不会影响性能。它会占用一些额外的内存。除非列表包含它将包含的所有元素,否则修剪它会降低性能,因为添加新元素时需要重新分配数组并复制所有引用。
public interface BaseDTO extends Serializable