Development Tip

java.util.ArrayList에 해당하는 Scala

yourdevel 2020. 11. 20. 09:44
반응형

java.util.ArrayList에 해당하는 Scala


저는 Scala에서 프로젝트를하고 있지만 언어에 익숙하지 않고 Java 배경을 가지고 있습니다. Scala에는 ArrayList가 없으므로 Java의 ArrayList에 해당하는 Scala가 무엇인지, 그리고 Java와 Scala 버전간에 중요한 차이점이 있는지 궁금합니다.

편집 : 내부 표현만큼 특정 동작을 찾고 있지 않습니다 (배열에 저장된 데이터이지만 전체 배열이 표시되지 않고 사용하는 부분 만 표시됩니다).


나는 당신의 질문을 해결하기 위해 세 가지 더 구체적인 질문을 생각할 수 있습니다.

  • Scala의 기본 컬렉션은 무엇입니까?
  • 어떤 Scala 컬렉션이 비슷한 특징을 가지고 ArrayList있습니까?
  • ArrayScala에서 좋은 대체물은 무엇입니까 ?

이에 대한 답변은 다음과 같습니다.

Scala의 기본 컬렉션은 무엇입니까?

Scala의 Java List인터페이스에 해당하는 것은 Seq. 보다 일반적인 인터페이스도 존재하는데 GenSeq, 주요 차이점 GenSeq은 구현에 따라 작업이 직렬 또는 병렬로 처리 될 수 있다는 것입니다.

Scala는 프로그래머가 Seq팩토리 로 사용할 수 있도록 허용하기 때문에 특정 구현에 대해 신경 쓰지 않는 한 종종 특정 구현을 정의하는 데 신경 쓰지 않습니다. 그렇게 할 때 일반적으로 Scala List또는 Vector. 둘 다 불변이며 Vector인덱싱 된 액세스 성능이 좋습니다. 반면에는 List잘 수행하는 작업을 잘 수행합니다.

어떤 Scala 컬렉션이 비슷한 특징을 가지고 ArrayList있습니까?

그것은 scala.collection.mutable.ArrayBuffer.

ArrayScala에서 좋은 대체물은 무엇입니까 ?

음, 좋은 소식은 ArrayScala에서 사용할 수 있다는 것 입니다! Java에서는 Array일반적으로 제네릭과 호환되지 않기 때문에 종종 피합니다. 제네릭은 불변이지만 변경 가능합니다. 공분산을 위험하게 만들고 제네릭이 허용하지 않는 프리미티브를 받아들이고 꽤 제한된 메소드 세트를 가지고 있습니다.

스칼라에서는 자바 Array와 동일 Array하지만 변하지 않기 때문에 대부분의 문제가 사라집니다. Scala는 AnyVal자동 박싱을 수행하더라도 "제네릭"에 대한 유형으로 (기본 요소에 해당하는)를 허용 합니다. 그리고 "내 라이브러리를 풍부하게"패턴을 통해, ALLSeq방법을 사용할 수 있습니다 Array.

좀 더 강력한 싶다면, Array, 단지를 사용합니다 Array.

축소되고 확장되는 컬렉션은 어떻습니까?

모든 컬렉션에 사용할 수있는 기본 메서드는 모두 컬렉션을 생성 합니다. 예를 들어 이렇게하면 :

val ys = xs filter (x => x % 2 == 0)

그런 다음 ys될 것입니다 반면, 수집 xs의지는 여전히이 명령 이전과 동일합니다. 이것이 사실에는 어떤 문제가 없습니다 xs했다 : Array, List, 등

결국, 당신은 - 물론,이 비용이 하는 새 컬렉션을 생산합니다. Scala의 불변 컬렉션은 지속적 이기 때문에이 비용을 처리하는 데 훨씬 더 좋지만 실행되는 작업에 따라 다릅니다.

어떤 컬렉션도에 대해 많은 것을 할 수는 filter없지만 List요소를 추가하거나 헤드 (사실상 스택의 기본 작업)를 제거하여 새 컬렉션을 생성하는 데 탁월한 성능을 발휘합니다. Vector많은 작업에서 좋은 성능을 제공하지만 컬렉션이 작지 않은 경우에만 지불합니다. 예를 들어 최대 100 개의 요소를 수집하는 경우 전체 비용이 이익을 초과 할 수 있습니다.

따라서 실제로 요소를 추가하거나 제거 할 수 Array있으며 Scala에서 새 항목 Array생성 하지만 그렇게 할 때 전체 복사본 비용을 지불하게됩니다.

Scala 가변 컬렉션은 몇 가지 다른 메서드를 추가합니다. 특히 새 컬렉션을 생성하지 않고 크기를 늘리거나 줄일 수있는 컬렉션은 GrowableShrinkable특성을 구현합니다 . 그러나 이러한 작업에서 좋은 성능을 보장하지는 않지만 확인하려는 컬렉션을 알려줄 것입니다.


에서 ArrayBuffer왔습니다 scala.collection.mutable. 여기 에서 scaladocs를 찾을 수 있습니다 .


봤어 ArraySeq?


어떤 행동을 ArrayList사용하고 싶은지 말하지 않았기 때문에 무엇을해야하는지 정확히 말하기는 어렵습니다 . 어떤 스칼라 특성을 활용하고 싶은지 생각하는 것이 더 유용합니다. 다음은 좋은 설명입니다. http://grahamhackingscala.blogspot.com/2010/02/how-to-convert-java-list-to-scala-list.html .

즉, 아마도 일종의 IndexedSeq.

참고 URL : https://stackoverflow.com/questions/8287360/scala-equivalent-of-java-util-arraylist

반응형