답변:
Java 용어로 Scala Seq
는 Java List
이고 Scala List
는 Java LinkedList
입니다.
참고 Seq
A는 trait
자바의 동일합니다, interface
하지만 동등한와 수비수 방법을 떠오르는. Scala List
는 Nil
and 로 확장되는 추상 클래스로 ::
,의 구체적인 구현입니다 List
.
따라서 Java List
가 인 interface
경우 Scala List
는 구현입니다.
그 외에도 Scala List
는 불변이며 이는 사실이 아닙니다 LinkedList
. 실제로, Java는 변경 불가능한 콜렉션과 동등하지 않습니다 (읽기 전용 항목은 새 오브젝트를 변경할 수 없음을 보장하지만 여전히 기존 오브젝트를 변경하여 "읽기 전용"오브젝트를 변경할 수 있음).
스칼라 List
는 컴파일러와 라이브러리에 의해 고도로 최적화되었으며 함수형 프로그래밍의 기본 데이터 유형입니다. 그러나 한계가 있으며 병렬 프로그래밍에는 적합하지 않습니다. 요즘 Vector
은보다 나은 선택 List
이지만 습관은 깨지기 어렵습니다.
Seq
시퀀스에 대한 좋은 일반화이므로 인터페이스에 프로그래밍하는 경우이를 사용해야합니다. 실제로는 세 가지가 있습니다. collection.Seq
, collection.mutable.Seq
및 collection.immutable.Seq
은 범위로 가져온 "기본"인 후자입니다.
이이기도 GenSeq
하고 ParSeq
. 후자는 가능한 경우 병렬로 실행되는 반면, 전자는 코드의 병렬화가 중요하지 않은 경우에 적합한 일반화 Seq
및의 부모 ParSeq
입니다. 둘 다 비교적 새로 도입되었으므로 사람들은 아직 많이 사용하지 않습니다.
UnsupportedOperationException
이것 때문에 일부를 칠 가능성 이 있습니다. Java에서 변경 불가능한 목록을 작성하려면 Collections.unmodifiableList ()를 사용하고 마찬가지로 Set, Maps 등의 다른 메소드도 있습니다. docs.oracle.com/javase/6/docs/api/java/util/…
서열은 요소의 정의 된 순서가 반복 가능하다. 시퀀스는 apply()
0에서 시퀀스의 길이에 이르는 색인 방법 을 제공합니다 . Seq에는 Queue, Range, List, Stack 및 LinkedList를 포함한 많은 서브 클래스가 있습니다.
목록 불변의 연결리스트로 구현되는 서열이다. 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
입니다.
@ 다니엘-C-소브랄 말했듯이, 목록의 특성 서열를 확장하여 구현하는 추상 클래스이다 scala.collection.immutable.$colon$colon
(또는 ::
목록 및 seqs의 대부분은 우리의 형태로 초기화 사용하는 것이, 마음을 줄여서) 만 제외하고 교칙 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]]
결과적으로 중요한 것은 노출하려는 메소드뿐입니다. 예를 들어 Seq에서 ::
중복으로 발견되는 List에서 사용할 수 +:
있으며 기본적으로 개인적으로 Seq를 고수합니다.
String
수집되지는 자바 프로그래머들에게 친숙한 불변 클래스의 예입니다.