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

时间:2016-11-28 06:36:37

标签: java jdbc arraylist

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

enter image description here

我的列表的实际大小应为138,但其初始化为数组大小。

enter image description here

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

public class LDCBeanCollection extends ArrayList implements BaseDTO

public interface BaseDTO extends Serializable

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

我如何克服这个问题?

1 个答案:

答案 0 :(得分:4)

ArrayList内部管理通常大于当前大小的后备阵列。由于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

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