Java-何时使用迭代器?

Java-何时使用迭代器?,java,performance,architecture,iterator,Java,Performance,Architecture,Iterator,我试图更好地理解什么时候应该和不应该使用迭代器。对我来说,每当我有大量数据需要迭代时,我都会为其编写一个迭代器。如果它也适合迭代器接口,那么它看起来是一个胜利 我读过一点,使用迭代器会有很多开销 我使用迭代器的一个很好的例子是迭代一组SQL脚本,一次执行一个查询,读入它,然后执行它 我是否应该注意另一个性能权衡?在使用迭代器之前,我会将要执行的SQL命令的整个字符串读取到ArrayList中,然后遍历它。如果导入量相当大(比如地理位置数据,那么服务器就会陷入困境) 沃尔特 我使用迭代器的一个很好

我试图更好地理解什么时候应该和不应该使用迭代器。对我来说,每当我有大量数据需要迭代时,我都会为其编写一个迭代器。如果它也适合迭代器接口,那么它看起来是一个胜利

我读过一点,使用迭代器会有很多开销

我使用迭代器的一个很好的例子是迭代一组SQL脚本,一次执行一个查询,读入它,然后执行它

我是否应该注意另一个性能权衡?在使用迭代器之前,我会将要执行的SQL命令的整个字符串读取到ArrayList中,然后遍历它。如果导入量相当大(比如地理位置数据,那么服务器就会陷入困境)

沃尔特

我使用迭代器的一个很好的例子是迭代一组SQL脚本,一次执行一个查询,读入它,然后执行它

在这种情况下,迭代器的开销可能比运行查询所需的时间要小

在使用迭代器之前,我会将要执行的SQL命令的整个字符串读取到ArrayList中,然后遍历它。如果导入量相当大(比如地理位置数据,那么服务器就会陷入困境)

有什么特别的原因需要将它们全部收集到ArrayList中吗?您可以在阅读语句时逐个执行它们


迭代器特别适合于动态/延迟加载/创建数据的流式传输情况。它们不要求数据预先完全存储在内存中。

我认为你的问题是什么时候应该“流式”输入,而不是将其全部加载到内存中并进行处理。我认为这不是使用迭代器的问题

“这要看情况而定,”当然,尽管在您给定的示例中,听起来输入流式传输而不是全部加载到内存是一个明显的胜利,所以确实要迭代

加载到内存中的好处通常是代码更简单,而且一次将大块加载到内存而不是一次读取位可能会带来一些好处。“流”的好处是,您可以限制内存需求,并获得与此相关的性能


作为一个非常粗糙的经验法则,我不会将类似的内容加载到内存中,除非我确定它在100K左右。

当时我使用了ArrayList,因为我需要保持顺序,而且将SQL命令放入ArrayList更容易。尽管我使用过迭代器,但我之前还没有写过迭代器,所以我没有想过用那种方式来写。现在我已经更多地使用了它们,使用它似乎是一个完美的场景。感谢您的输入-是的,这就是我得到的以及迭代器的有效性。我喜欢用不同的方法来解决同一个问题。随着文件越来越大,这两种方法都会起作用,最终迭代器将更加高效,不会消耗服务器中的所有内存。这里已经给出了非常好的答案: