programing

Scala에서의 Seq와 리스트의 차이

kakaobank 2023. 4. 22. 09:49
반응형

Scala에서의 Seq와 리스트의 차이

때로는 Seq가 사용되는 반면 다른 때는 목록이 사용되는 것을 많은 예에서 봐왔습니다.

앞의 것은 Scala 타입이고, List는 Java에서 온 것 이외에는 다른 점이 있습니까?

자바어로 Scala의SeqJava의 것이 됩니다.List및 Scala의ListJava의 것이 됩니다.LinkedList.

주의:Seq는 입니다.trait(Java와 비슷합니다.interface하지만 차세대 수비수법과 동등합니다.스칼라List에 의해 확장되는 추상 클래스입니다.Nil그리고.::(이러한 실장)List.

자바의 장점List는 입니다.interface, Scala의List는 실장입니다.

그 이상 스칼라의List불변의 존재입니다.그렇지 않습니다.LinkedList사실 Java에는 불변의 컬렉션과 동등한 것이 없습니다(읽기 전용은 새로운 오브젝트를 변경할 수 없음을 보증합니다만, 이전 오브젝트를 변경할 수 있기 때문에 "읽기 전용"은 변경할 수 있습니다).

스칼라List컴파일러와 라이브러리에 의해 고도로 최적화되어 기능 프로그래밍의 기본 데이터 유형입니다.하지만, 그것은 한계가 있고 병렬 프로그래밍에 적합하지 않습니다.요즘...Vector보다 좋은 선택이다List하지만 습관은 고치기 힘들다.

Seq는 시퀀스에 대한 적절한 일반화이므로 인터페이스에 프로그래밍할 경우에는 그것을 사용해야 합니다.실제로는 다음 세 가지가 있습니다.collection.Seq,collection.mutable.Seq그리고.collection.immutable.Seq스코프로 Import되는 「디폴트」는 후자입니다.

그리고 또GenSeq그리고.ParSeq후자의 방법은 가능한 한 병렬로 실행되지만, 전자는 양쪽의 부모입니다.Seq그리고.ParSeq코드 병렬화에 대한 우려가 없는 경우에 적합한 일반화입니다.둘 다 비교적 새 제품이라 사람들이 많이 사용하지 않는다.

Seq는 요소의 순서가 정의된 반복 가능입니다.시퀀스는 다음 방법을 제공합니다.apply()인덱스의 범위는 0부터 시퀀스 길이까지입니다.Seq에는 Queue, Range, List, Stack, LinkedList 등 많은 서브클래스가 있습니다.

목록은 불변의 링크 목록으로 구현되는 Seq입니다.LIFO(Last-In First-Out) 액세스 패턴이 있는 경우에 가장 적합합니다.

Scala FAQ의 완전한 컬렉션클래스 계층을 다음에 나타냅니다.

여기에 이미지 설명 입력

Seq의 특성이다.List용품

를 「아니다」라고 하면,Seq, 를 실장하는 모든 컨테이너를 사용할 수 있습니다.Seq

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)

되지 않은 기본 는 " " "로 됩니다.List.

Scala에서 List는 Seq에서 상속되지만 Product를 구현합니다.List의 올바른 정의는 다음과 같습니다.

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

(주의: Scala의 매우 강력한 컬렉션 프레임워크에 적합하고 활용하기 위해 실제 정의는 조금 더 복잡합니다.)

는 @ 것처럼하고 @daniel-c-sobral에 의해 구현되는 입니다.scala.collection.immutable.$colon$colon (오류)::요컨대) 하지만 기술적인 측면은 차치하고, 우리가 사용하는 목록과 seq의 대부분은 다음과 같은 형태로 초기화된다는 점에 유의하십시오.Seq(1, 2, 3) ★★★★★★★★★★★★★★★★★」List(1, 2, 3) 다 돌려주다scala.collection.immutable.$colon$colon을 사용하다

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]]

때문에 를 들어 에 붙이기 는 그, 요, 요, 요, 요, 요, 요, 요, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, 예를 들어 당신이 사용할 수 있는 프리펜드입니다.::되어 있다고 생각되는 +:저와 Seq는 기본적으로 Seq를 고수하고 있습니다.

언급URL : https://stackoverflow.com/questions/10866639/difference-between-a-seq-and-a-list-in-scala

반응형