hrv*_*hrv 7 java collections iterator
我经常在许多地方读过,应该避免返回iterable并返回collection.例如 -
public Iterable<Maze> Portals() {
// a list of some maze configurations
List<Maze> mazes = createMazes();
...
return Collections.unmodifiableList(mazes);
}
Run Code Online (Sandbox Code Playgroud)
因为返回a iterable只对在foreach循环中使用它有用,同时collection已经提供了一个iterator并提供了更多的控制.你能告诉我什么时候特意返回iterable一个方法是有益的吗?或者我们应该总是返回一个collection?
注意:这个问题与Guava库无关
Ter*_* Li 12
Iterable当我们需要懒洋洋地加载包含大量元素的集合时,返回一个将是有益的.
以下来自Google Collections FAQ的引用似乎支持延迟加载的想法:
为什么如此强调迭代器和Iterables?
通常,当Iterable或Iterator足够时,我们的方法不需要传入Collection.这种区别对我们很重要,因为有时在谷歌我们使用非常大量的数据,这些数据可能太大而无法容纳在内存中,但可以在一些计算过程中从头到尾遍历.这样的数据结构可以实现为集合,但是它们的大多数方法都必须抛出异常,返回错误的答案或者执行不正确的操作.对于这些情况,Collection非常不合适; 圆孔中的方形钉.
Iterator表示元素的单向可滚动"流",Iterable是可以生成独立迭代器的任何东西.集合远不止于此,因此我们只在需要时才需要它.