Java Iterable的优点和缺点

cmc*_*nty 0 java optimization coding-style

接受和返回Iterable<T>类型的Java方法非常常见.我看到的问题是Iterator 接口非常有限,要么需要将Iterable重构为可用的数据结构,要么强制用户执行Iterable的多次遍历,从而增加执行时间.

有人可以纠正我吗?Iterables是否像我认为的那样糟糕?如果您被迫使用它们,是否有任何技术可以用来解决Iterables的限制?

Mar*_*ers 6

关于接受Iterable<T>,这显然是一件好事.这意味着你几乎可以传递任何数据结构 - 它只需要实现非常简单的Iterable<T>接口.这使代码更易于重用.

为了返回一个Iterable<T>优点,该方法的实现可以改变 - 可能使用更有效的数据结构,或者通过在请求时懒惰地生成结果(例如,从磁盘流式传输它们).在不破坏客户端的情况下更改实现很容易,因为它们仅依赖于Iterable<T>接口.如果您暴露了a,List<T>那么您无法确定您的客户端是否会按顺序访问数据.

你是对的,如果你需要不止一次访问结果,那么首先将数据复制到不同的结构是有意义的.但只有您知道哪些特定集合对您的特定情况最有用.有时它可能是一个ArrayList.其他时候您可能更喜欢将项目存储在HashMap.因此,您通常必须将数据复制到新的数据结构中.