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

ash*_*aaj 2 java jdbc arraylist

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

在此输入图像描述

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

在此输入图像描述

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

public class LDCBeanCollection extends ArrayList implements BaseDTO

public interface BaseDTO extends Serializable
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能克服这个问题?

Jim*_*son 5

AnArrayList内部管理一个通常大于当前大小的后备数组。由于ArrayList是一个可变长度列表,因此数组大小是在内部管理的,因此不必在每次添加元素时重新分配。那将是非常昂贵的。当列表溢出时(您添加更多当前适合的元素),后备数组大小将incremented by 1.5 times than original size允许将来扩展。

换句话说,后备数组的末尾几乎总会有额外的未使用元素,并且它们每个条目仅消耗一个引用。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/ArrayList.java#ArrayList.grow%28int%29

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

  • @Darshit 不,它不会影响性能。它会占用一点额外的内存。除非列表包含它将包含的所有元素,否则修剪它会降低性能,因为添加新元素时需要重新分配数组并复制所有引用。 (2认同)