복붙노트

[SCALA] 반복자 대보기 대 스트림

SCALA

반복자 대보기 대 스트림

스칼라의 스트림, 뷰 (SeqView) 사이의 차이와 반복자는 무엇입니까? 이것은 나의 이해입니다 :

내가 힙 공간을 절약 할 그렇다면이나 뷰 (필자는 다시 목록을 통과하지 않을 경우), I는 반복자를 사용해야합니까? 감사.

해결법

  1. ==============================

    1.첫째, 모든 비 엄격합니다. 즉, 기본적으로, 그들은 필요시 대신 미리 계산 수단의 기능에 관련된 특정 수학적 의미를 가지고 있지만.

    첫째, 모든 비 엄격합니다. 즉, 기본적으로, 그들은 필요시 대신 미리 계산 수단의 기능에 관련된 특정 수학적 의미를 가지고 있지만.

    스트림은 참으로 게으른 목록입니다. 사실, 스칼라에서는, 스트림은 그 꼬리 게으른 발 인 목록입니다. 계산되면, 값의 숙박은 계산 재사용된다. 당신이 말한대로 또는, 값이 캐시됩니다.

    반복자 만이 탐색 모음에 포인터, 그리고 자체 모음입니다 때문에 한 번만 사용할 수 있습니다. 무엇 스칼라에서 특별하게 만드는 것은 당신이지도와 필터 등의 변환을 적용하고 단순히 다음 요소를 요청할 경우에만 이러한 변환을 적용하는 새로운 반복자를 얻을 수 있다는 사실이다.

    스칼라가 재설정 될 수 반복자를 제공하는 데 사용하지만 일반적인 방식으로 지원하는 것은 매우 어렵습니다, 그들은 버전 2.8.0을하지 않았다.

    뷰는 많은 데이터베이스 뷰처럼 볼 수하기위한 것입니다. 그것은 하나의 "가상"집합을 생성하기 위해 수집 적용되는 변환의 연속이다. 당신이 말했듯이, 모든 변환 당신이 그것을에서 요소를 가져 오기 위해 필요할 때마다 다시는-적용됩니다.

    두 반복자 및 뷰는 우수한 메모리 특성을 가지고있다. 스트림은 좋지만, 스칼라, 주요 이점은 (특히 재귀 적으로 정의 된 순서) 무한 시퀀스를 쓰고있다. 하나는 (스트림을 정의하기 위해 발의 DEF를 사용하는 대신, 예를 들어) 당신이 머리에 대한 참조를 유지하지 않는함으로써, 비록 메모리 스트림을 모두 유지 피할 수 있습니다.

    때문에보기가 발생 페널티 하나는 일반적으로 변환을 적용한 후이를 강제적으로, 또는 단지 몇 개의 요소가 뷰의 전체 크기에 비해 적 페치 될 것으로 예상되는 경우보기로 유지.

  2. from https://stackoverflow.com/questions/5159000/stream-vs-views-vs-iterators by cc-by-sa and MIT license