【发布时间】:2014-07-18 07:58:55
【问题描述】:
假设我有一个dataObject,他有一个返回集合的getChildren() 函数,但无论出于何种原因,这是一个我想避免的缓慢过程。然后我想迭代所述集合。为此,getChildren() 将在没有子项时返回一个空集合,而不是 null。
我可以不做吗:
for(dataObject child : parent.getChildren()){ ... }
或者是每个循环都调用getChildren(),这意味着为了避免每次调用代价高昂,我需要改为:
Collection<dataObject> children = parent.getChildren();
for(dataObject child : children){ ... }
如果我的父级返回不同的集合,这也可能会导致问题,例如,如果添加/删除了一个子级,并且我当时想查看子级的快照(让我们掩盖其他问题)。
我怀疑第一个版本确实没问题,因为 for 循环在启动时会为集合获取一个迭代器,并且只是引用该迭代器,但这是我从未确认过的。
【问题讨论】:
-
当然不是,这对每个人来说都太慢了。但是您可以自己检查一下:如果您无法调试,只需在
getChildren中添加一个 println。 -
在getChildren中下一个断点,看是不是每次都被调用
-
@AnkitLamba 不确定是否是,这是专门询问如何首先查询 Collection。
标签: java collections foreach