Java Iterable的优点和缺点

时间:2012-05-29 20:57:37

标签: java optimization coding-style

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

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

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

此外,在JDK 8中,我们会看到Iterable界面的重大改进。

通过添加extension methods,接口将提供默认实现,并且将添加许多新函数以提供相当于能够接受lambda expressions的高阶函数,lazy evaluation由于它们的迭代性质而不是并行性,所以将在时尚界实现。

答案 2 :(得分:1)

接受Iterable< T >对您的客户来说是一项很棒的服务。

返回它往往是对他们的伤害。如果您不打算改变您对用于实现结果的集合的想法,那么您应该尽可能具体。