스칼라가 불변의 데이터 구조를 지원한다는 것을 알고 있습니다. 목록을 업데이트 할 때마다 힙에서 새로운 객체와 참조를 생성합니다. 내가 목록에 두 번째 요소를 추가 할 때스칼라에서 변경할 수없는 데이터 구조
예
val xs:List[Int] = List.apply(22)
val newList = xs ++ (33)
는 그래서 모두 (22)를 포함하고 33.This 정확하게 자바에서 어떻게 작동하는지 불변 문자열처럼 작동하는 새로운 목록을 생성합니다. 그래서 질문은 목록에 요소를 추가 할 때마다 새로운 개체가 매번 생성 될 것입니다.이 방법은 효율적이지 않습니다. 거기에 영구 데이터 구조와 같은 몇 가지 특별한 데이터 구조가 있습니다.이 문제를 처리 할 때 사용됩니다.
불변성을 선호하는 좋은 이유가 있습니다. 이러한 이유에 대한 좋은 요약은 ** Effective Java **, Item 15에서 찾아 볼 수 있습니다. 성능 문제를 해결하기 위해 mutable 데이터 구조의 효율적인 내부 구현에 의존하거나 변경할 수있는 부분을 사용하는 것이 좋습니다 (예 :'ListBuffer'). –
리스트는 prepending 할 때만 효율적입니다. 추가하려는 경우 벡터 데이터 구조를 사용하는 IndexedSeq을 사용하십시오. 그것은 appending과 prepending 모두에 대해 합리적으로 효율적이며 또한 불변입니다. –