[SCALA] 반복자 대보기 대 스트림
SCALA반복자 대보기 대 스트림
스칼라의 스트림, 뷰 (SeqView) 사이의 차이와 반복자는 무엇입니까? 이것은 나의 이해입니다 :
내가 힙 공간을 절약 할 그렇다면이나 뷰 (필자는 다시 목록을 통과하지 않을 경우), I는 반복자를 사용해야합니까? 감사.
해결법
-
==============================
1.첫째, 모든 비 엄격합니다. 즉, 기본적으로, 그들은 필요시 대신 미리 계산 수단의 기능에 관련된 특정 수학적 의미를 가지고 있지만.
첫째, 모든 비 엄격합니다. 즉, 기본적으로, 그들은 필요시 대신 미리 계산 수단의 기능에 관련된 특정 수학적 의미를 가지고 있지만.
스트림은 참으로 게으른 목록입니다. 사실, 스칼라에서는, 스트림은 그 꼬리 게으른 발 인 목록입니다. 계산되면, 값의 숙박은 계산 재사용된다. 당신이 말한대로 또는, 값이 캐시됩니다.
반복자 만이 탐색 모음에 포인터, 그리고 자체 모음입니다 때문에 한 번만 사용할 수 있습니다. 무엇 스칼라에서 특별하게 만드는 것은 당신이지도와 필터 등의 변환을 적용하고 단순히 다음 요소를 요청할 경우에만 이러한 변환을 적용하는 새로운 반복자를 얻을 수 있다는 사실이다.
스칼라가 재설정 될 수 반복자를 제공하는 데 사용하지만 일반적인 방식으로 지원하는 것은 매우 어렵습니다, 그들은 버전 2.8.0을하지 않았다.
뷰는 많은 데이터베이스 뷰처럼 볼 수하기위한 것입니다. 그것은 하나의 "가상"집합을 생성하기 위해 수집 적용되는 변환의 연속이다. 당신이 말했듯이, 모든 변환 당신이 그것을에서 요소를 가져 오기 위해 필요할 때마다 다시는-적용됩니다.
두 반복자 및 뷰는 우수한 메모리 특성을 가지고있다. 스트림은 좋지만, 스칼라, 주요 이점은 (특히 재귀 적으로 정의 된 순서) 무한 시퀀스를 쓰고있다. 하나는 (스트림을 정의하기 위해 발의 DEF를 사용하는 대신, 예를 들어) 당신이 머리에 대한 참조를 유지하지 않는함으로써, 비록 메모리 스트림을 모두 유지 피할 수 있습니다.
때문에보기가 발생 페널티 하나는 일반적으로 변환을 적용한 후이를 강제적으로, 또는 단지 몇 개의 요소가 뷰의 전체 크기에 비해 적 페치 될 것으로 예상되는 경우보기로 유지.
from https://stackoverflow.com/questions/5159000/stream-vs-views-vs-iterators by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 이와 같은 재 시도-수 호출을 구현하는 스칼라 방법은 무엇입니까? (0) | 2019.11.07 |
---|---|
[SCALA] 함수 프로그래밍 스칼라는지도 왼쪽 접어서 [마감] (0) | 2019.11.07 |
[SCALA] 방법 인 IntelliJ 아이디어와 SBT 프로젝트를 만드는 방법? (0) | 2019.11.07 |
[SCALA] 서열과 스칼라에서 목록의 차이 (0) | 2019.11.07 |
[SCALA] 안드로이드에 대한 스칼라 프로그래밍 (0) | 2019.11.07 |