Immutable Collections Library for Kotlin
Kotlin に本当に immutable なコレクションAPIを提供する Kotlin の Collection 実装は immutable ではない:
Repo
Interfaces
ImmutableCollection
ImmutableList, ImmutableSet, ImmutableMap
標準の Collection を継承した read only な interface
MutableCollection 族と独立しているのでキャストなどして制約を破ることはできないようになっている
PersistentCollection
PersistentList, PersistentSet, PersistentMap
ImmutableCollection を継承し、追加や削除などの変更操作APIを追加した interface
変更のたびに新しいインスタンスを作成して返却するため immutability は保持される
単に新しいインスタンスを作って値をコピーしてというわけではなく、structural sharing を用いて、共通する部分のデータを共有することで効率的なデータ保持を実現している
Immutable だからこそこのようなデータ共有が問題なく行える
実体
ImmutableList, PersistentList
PersistentVector, AbstractPersistentList を見よ
ImmutableMap, PersistentMap
PersistentHashMap が unordered, PersistentOrderedMap が ordered の場合の実装
ImmutableSet, PersistentSet
PersistentHashSet が unordered, PersistentOrderedSet が ordered の場合の実装
PersistentCollection の Builder
Collection のコンテンツを作るのに使う
MutableCollection が使われる
関連資料