복붙노트

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

SCALA

서열과 스칼라에서 목록의 차이

나는 다른 시간의 목록이있는 동안 때로는 서열 번호가 사용되는 많은 예에서 본 적이 ...

차이는 스칼라 유형과 자바에서 나오는 목록 인 전자 이외의 다른 있나요?

해결법

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

    1.자바 측면에서, 스칼라의 서열은 자바의 목록이 될 것이며, 스칼라의 목록은 자바의 LinkedList의 것입니다.

    자바 측면에서, 스칼라의 서열은 자바의 목록이 될 것이며, 스칼라의 목록은 자바의 LinkedList의 것입니다.

    서열 번호가 있지만, 유망한 수비수 방법의 동등한, 자바의 인터페이스에 해당하는 특성이라고 참고. 스칼라의 목록 목록의 구체적인 구현입니다 무기 호 및 ::에 의해 확장되는 추상 클래스입니다.

    자바의 목록 인터페이스입니다 그래서, 스칼라의 목록 구현이다.

    그건 그렇고, 스칼라의 목록 LinkedList의 경우하지 않은, 불변이다. 사실, (따라서, "읽기 전용"하나를이 유일한 것은 단지 새 개체를 변경할 수 없습니다 보장 읽을 수 있지만 여전히 이전을 변경할 수 있으며) 자바는 불변의 컬렉션에 해당 결코 없습니다.

    스칼라의 목록은 매우 컴파일러 및 라이브러리 최적화, 그리고 함수형 프로그래밍의 기본 데이터 형식입니다됩니다. 그러나 한계를 가지고 있으며 병렬 프로그래밍에 대한 부적절한입니다. 요즘은 벡터 목록보다 더 나은 선택이지만, 습관 깰 어렵다.

    서열은 인터페이스 프로그램 그래서 만약, 당신이 그것을 사용해야 시퀀스에 대한 좋은 일반화이다. 참고가 실제로 세 가지 것을 : collection.Seq, collection.mutable.Seq 및 collection.immutable.Seq, 그것은 범위로 가져온 "기본"는 후자입니다.

    또한 GenSeq 및 ParSeq있다. 전 부모 코드의 병렬 상관하지 않는 경우에 적합한 일반화되고, 서열과 ParSeq 모두 반면 후자의 방법은 병렬로 실행 가능한. 그들은 상대적으로 새로 도입 된 모두, 그래서 사람들은 아직 많이 사용하지 않습니다.

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

    2.서열 요소의 정의 된 순서가 반복 가능하다. 시퀀스는 0 내지 서열의 길이까지의 범위, 인덱싱하기위한 방법을 적용 ()를 제공한다. 서열은 큐, 범위, 목록, 스택 및 LinkedList의를 포함하여 많은 서브 클래스가 있습니다.

    서열 요소의 정의 된 순서가 반복 가능하다. 시퀀스는 0 내지 서열의 길이까지의 범위, 인덱싱하기위한 방법을 적용 ()를 제공한다. 서열은 큐, 범위, 목록, 스택 및 LinkedList의를 포함하여 많은 서브 클래스가 있습니다.

    목록은 불변의 연결리스트로 구현되는 서열이다. 그것은 가장 먼저 아웃 (LIFO) 액세스 패턴에 마지막으로 경우에 사용됩니다.

    다음은 스칼라 자주 묻는 질문에서 전체 컬렉션 클래스 계층 구조는 다음과 같습니다

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

    3.서열 번호리스트 구현하는 특성이다.

    서열 번호리스트 구현하는 특성이다.

    당신 서열로 컨테이너를 정의하면, 당신은 어떤 컨테이너가 구현 서열 특성을 사용할 수 있습니다.

    scala> def sumUp(s: Seq[Int]): Int = { s.sum }
    sumUp: (s: Seq[Int])Int
    
    scala> sumUp(List(1,2,3))
    res41: Int = 6
    
    scala> sumUp(Vector(1,2,3))
    res42: Int = 6
    
    scala> sumUp(Seq(1,2,3))
    res44: Int = 6
    

    참고

    scala> val a = Seq(1,2,3)
    a: Seq[Int] = List(1, 2, 3)
    

    단지 짧은 손입니다 :

    scala> val a: Seq[Int] = List(1,2,3)
    a: Seq[Int] = List(1, 2, 3)
    

    목록에 컨테이너 유형이 지정되지 않은 경우, 기본 데이터 구조 기본 설정됩니다.

  4. ==============================

    4.스칼라, 서열에서 목록 상속하지만, 구현 제품에서; 여기에 목록의 적절한 정의는 다음과 같습니다

    스칼라, 서열에서 목록 상속하지만, 구현 제품에서; 여기에 목록의 적절한 정의는 다음과 같습니다

    sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...
    

    [참고 :. 실제 정의는 약간 스칼라의 매우 강력한 컬렉션 프레임 워크의 사용과 및 메이크업에 맞추기 위해, 더 복잡한 비트입니다]

  5. ==============================

    5.@ 다니엘-C-소브랄 말했듯이, 목록, 마음을 형질 서열을 확장하고 scala.collection.immutable에 의해 구현 추상 클래스입니다. $ 대장 $ 콜론 (또는 :: 줄여서) 만 제외하고 교칙 목록 및 seqs의 대부분이 . 우리는 서열 번호 (1, 2, 3) 또는 목록 (1, 2, 3)을 모두 반환 scala.collection.immutable $ 대장 $ 대장의 형태로 초기화 사용, 따라서 하나 쓸 수 있습니다 :

    @ 다니엘-C-소브랄 말했듯이, 목록, 마음을 형질 서열을 확장하고 scala.collection.immutable에 의해 구현 추상 클래스입니다. $ 대장 $ 콜론 (또는 :: 줄여서) 만 제외하고 교칙 목록 및 seqs의 대부분이 . 우리는 서열 번호 (1, 2, 3) 또는 목록 (1, 2, 3)을 모두 반환 scala.collection.immutable $ 대장 $ 대장의 형태로 초기화 사용, 따라서 하나 쓸 수 있습니다 :

    var x: scala.collection.immutable.$colon$colon[Int] = null
    x = Seq(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
    x = List(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
    

    서열에서 나는 개인적으로 기본적으로 서열에 충실 : 인스턴스가 사용할 수있는 :: 목록에서 앞에 추가하는 결과로, 나는 +와 중복을 찾을 수 있다는 문제가 노출 할 방법이라는 것을 유일한보다 주장 할 것 .

  6. from https://stackoverflow.com/questions/10866639/difference-between-a-seq-and-a-list-in-scala by cc-by-sa and MIT license