복붙노트

[SCALA] 스칼라의 배열과 목록의 차이

SCALA

스칼라의 배열과 목록의 차이

어떤 경우에 나는 배열 (버퍼)와 목록 (버퍼)를 사용합니다. 내가 알고있는 단 하나의 차이점은 배열 nonvariant하고 목록을 공변 있다는 것입니다. 그러나 성능과 다른 특성에 대한?

해결법

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

    1.스칼라 목록 (실제로 변경할 수있는 - 배열의 불변의 아날로그 IndexedSeq입니다) 당신은 (아마도) 배열보다 훨씬 더 그것을 사용되어야한다고 스칼라에서 이러한 기본 구조이다 불변의 재귀 데이터 구조입니다.

    스칼라 목록 (실제로 변경할 수있는 - 배열의 불변의 아날로그 IndexedSeq입니다) 당신은 (아마도) 배열보다 훨씬 더 그것을 사용되어야한다고 스칼라에서 이러한 기본 구조이다 불변의 재귀 데이터 구조입니다.

    당신이 자바 배경에서 오는 경우 ArrayList를 통해 LinkedList의를 사용하는 경우, 다음 명백한 평행이다. 전자는 일반적으로 (크기가 알려지지 않은 선행 등), 반면 후자의 공지 된 크기를 갖는 하나 목록 (또는 최대 크기)에 사용해야하거나 빠른 랜덤 액세스 중요 오직 이송되는 목록에 사용된다.

    ListBuffer은 나중에 변환이 필요한 경우 ListBuffer를 사용하는 것이 혼자 이유는 목록에 일정 시간의 변환을 제공합니다.

    당신이 사용하지 않는 경우, 그 내용을 상자 것입니다 목록 [지능] (이상 (의 int []로) 스칼라의 배열은 자바 배열하여 JVM에서 구현되어야하고, 따라서 배열은 [지능]는 훨씬 더 확대됨에 될 수있다 새로운 @specialized 기능이 스칼라의 최신 버전).

    당신이 정말 수 배열이 정말 필요한 기본 유형의 지원 여부를 결정하는 후드 아래에 무슨 일이 일어나고 있는지 알 필요가, 또는 같은 느낌 때문에, 나는 스칼라에서 배열의 사용은 최소로 유지해야한다고 생각 래퍼 유형으로 박스한다.

  2. ==============================

    2.답변뿐만 아니라 이미 배치에서, 여기에 몇 가지 구체적인이다.

    답변뿐만 아니라 이미 배치에서, 여기에 몇 가지 구체적인이다.

    배열 [A]를 그대로 Java 배열이지만, 목록 [A]는 어느 닐 (빈리스트) 또는 (A,리스트 [A])는 쌍으로 구성되는 불변의 데이터 구조이다.

    성능 차이

                              Array  List
    Access the ith element    θ(1)   θ(i)
    Delete the ith element    θ(n)   θ(i)
    Insert an element at i    θ(n)   θ(i)
    Reverse                   θ(n)   θ(n)
    Concatenate (length m,n)  θ(n+m) θ(n)
    Count the elements        θ(1)   θ(n)
    

    메모리의 차이

                              Array  List
    Get the first i elements  θ(i)   θ(i)
    Drop the first i elements θ(n-i) θ(1)
    Insert an element at i    θ(n)   θ(i)
    Reverse                   θ(n)   θ(n)
    Concatenate (length m,n)  θ(n+m) θ(n)
    

    당신이 빠른 랜덤 액세스를 필요로하지 않는 그래서, 필요 요소를 계산하기 위해, 또는 파괴적인 업데이트를해야 할 몇 가지 이유를 들어, 목록 배열보다 낫다.

  3. ==============================

    3.배열 (기본적으로) 목록이 새로운 목록은 수정을 할 때마다 생성되는 것을 의미 불변하는 동안, 각 인덱스의 값을 변경할 수 있습니다 의미 변경할 수 있습니다. 대부분의 경우 그것은 불변의 데이터 유형과 일에 대한보다 "기능"스타일이며, 당신은 아마 시도 등 수율, foreach는, 경기와 같은 구조를 가진 목록을 사용해야합니다.

    배열 (기본적으로) 목록이 새로운 목록은 수정을 할 때마다 생성되는 것을 의미 불변하는 동안, 각 인덱스의 값을 변경할 수 있습니다 의미 변경할 수 있습니다. 대부분의 경우 그것은 불변의 데이터 유형과 일에 대한보다 "기능"스타일이며, 당신은 아마 시도 등 수율, foreach는, 경기와 같은 구조를 가진 목록을 사용해야합니다.

    새로운 요소 (추가) 붙이는 경우에서 빠른 반면, 성능 특성의 경우, 배열 요소 랜덤 액세스 빠르다. 이들의 반복 비교입니다.

  4. from https://stackoverflow.com/questions/2712877/difference-between-array-and-list-in-scala by cc-by-sa and MIT license