2010-04-01 14 views
8

반복기를 사용해야 할 때와 사용하지 말아야 할 때를 더 잘 이해하려고합니다. 필자가 반복 할 데이터의 양이 많을 때마다 Iterator를 작성한다. Iterator 인터페이스에도 적합하다면, 그것은 승리처럼 보입니다.자바 - 반복기를 사용하는 경우?

Iterator를 사용하면 오버 헤드가 많이 발생한다는 것을 약간 읽었습니다.

Iterator를 사용하는 좋은 예는 한 번에 하나의 쿼리를 실행하고 읽은 다음 실행하는 일련의 SQL 스크립트를 반복하는 것입니다.

내가 알아야 할 또 다른 성능 트레이드 오프가 있습니까? iterator를 사용하기 전에 ArrayList로 실행하기위한 전체 String of SQL 명령문을 읽은 다음이를 반복합니다. 임포트가 다소 큰 경우 (Geolocation 데이터의 경우와 같이 서버가 다운되는 경향이 있음).

월터

+0

꽤 좋은 대답은 여기에 있습니다 : http://stackoverflow.com/questions/1879255/traditional-for-loop-vs-iterator-in-java – Zak

답변

9

저는 여러분의 질문이 모든 것을 메모리에로드하고 처리하는 것이 아니라 '스트림'해야한다고 생각합니다. Iterator을 사용하는 것이 아닌가 생각합니다.

"당신의 주어진 예제에서 모든 것을 메모리에로드하는 것이 아니라 입력을 스트리밍하는 것처럼 들리 겠지만 분명히 승리합니다. 따라서 실제로 반복됩니다.

메모리로로드 할 때의 장점은 일반적으로 코드가 더 간단하다는 것입니다. 한 번에 비트를 읽는 대신 큰 청크를 메모리에 한 번에로드하면 몇 가지 이점을 얻을 수 있습니다. "스트리밍"의 이점은 메모리 요구 사항을 제한하고 이와 관련된 성능을 얻는 것입니다.

엄밀히 말하자면, 내가 100K 이하라고 확신하지 못하면 메모리에이 같은 것을로드하지 않을 것입니다.

+0

귀하의 의견을 보내 주셔서 감사합니다. - 예, 그것이 Iterator의 타당성과 함께 얻고 있습니다.나는 같은 문제를 해결하기 위해 다른 접근법에 노출되는 것을 좋아한다. 파일이 커지면 둘 다 작동 할 것이고, 결과적으로 Iterator는 더 효율적이 될 것이고 서버의 모든 메모리를 소비하지 않을 것입니다. –

1

내가 반복자는 다음을 실행에 그것을 읽고, 한 번에 하나 개의 쿼리를 실행하는 SQL 스크립트의 무리를 반복하는 것이었다 사용하는 경우의 좋은 예.

이 시나리오에서 Iterator의 오버 헤드는 쿼리를 실행하는 데 걸릴 때까지 비하면 작아 보입니다.

반복기를 사용하기 전에 전체 SQL 명령 문자열을 읽고 ArrayList로 실행하고이를 통해 반복합니다. 임포트가 다소 큰 경우 (Geolocation 데이터의 경우와 같이 서버가 다운되는 경향이 있음).

ArrayList로 모두 수집해야하는 특별한 이유가 있습니까? 문장을 읽을 때마다 하나씩 실행할 수 있습니다.

반복기는 데이터가 즉시/느슨하게로드/생성되는 스트리밍 경우에 특히 적합합니다. 데이터를 완전히 메모리에 저장하지 않아도됩니다.

+0

주문을 유지해야하기 때문에 ArrayList를 사용했습니다. SQL 명령을 ArrayList에 넣는 것이 더 쉬웠습니다. Iterators를 사용해 왔지만 필자는 필자가 직접 작성하지 않았기 때문에 필자는 그렇게 반복적으로 작성하지 않았다. 이제는 좀 더 사용해 보았습니다. 사용하기에 완벽한 시나리오 인 것 같습니다. –

관련 문제