Kotlinにおけるリストとmutablelistの違いの理解
私はimimabilityについて考えていました.私はほとんどこの画面を通してあなたの興奮を感じることができます!特に、私は調査して、あなたが故意に、または、無知に、Koltlinで不変性を破ることができる方法を学ぶようにしていました.私の最後の試みは、変更可能なリストを変更可能なリストに変更するために、変更可能なリストを変更可能なリストとしてキャストします.私が試みて失敗した間、私がしたいことの詳細で、私は何を作るかについてかなりおもしろい量を学びました
インタフェース、インタフェース、インタフェース
一瞥Kotlin’s documentation の違いについての良い概要を提供します
うーん、エキサイティング!それで
インパッケージ
同じパッケージでは、定義を見ることができます
それ自体で、これは私たちに多くのことを知らせません
関数、関数、関数
別の観点から見てみましょう.我々が起動するとき、何が起こりますか
あなたの中の好奇心のために.
混合界面と機能
だから本質的には インターフェイス に依存するインタフェースからオブジェクトをインスタンス化するために使用できる関数 もう1つのステップを取りましょう
の1つでスニークピークを取りましょう
多分、私はKotlinのソースコードへの掘削の量を誇張したかもしれません
List
Aと異なるMutableList
, そして、私がここで学んだことについてもう少し共有します.インタフェース、インタフェース、インタフェース
一瞥Kotlin’s documentation の違いについての良い概要を提供します
List
保存された要素への読み取り専用アクセスを提供します.MutableList
既存のリストから特定の要素を追加または削除できるようにする「リスト固有の書き込み操作」を提供します.私が興味を持ったのは、ドキュメントの最後の文です.In Kotlin, the default implementation of List is ArrayList which you can think of as a resizable array.
うーん、エキサイティング!それで
List
本当に単純なリストではないが、実際にはArrayList
. 私たちはMutableList
は単にArrayList
, でしょう.私たちは仮定することができるか、我々は単に行くことができますし、どのように小林標準ライブラリを実際にこれらのことを実装確認します.インパッケージ
kotlin.collections
の定義を見ることができますList
:public interface List<out E> : Collection<E> { (...) }
List
から継承するCollection
そして、機能定義のシリーズを特徴としますget
. Collection
は、Iterable
.同じパッケージでは、定義を見ることができます
MutableList
:public interface MutableList<E> : List<E>, MutableCollection<E> { (...) }
MutableList
から継承するMutableCollection
. MutableList
特長などの追加メソッドのシリーズadd
and remove
, 突然変異能力の付与MutableCollection
から継承するCollection
and MutableIterable
, はIterator
.それ自体で、これは私たちに多くのことを知らせません
List
and MutableList
は基本的に2つの異なるインターフェイスで、読み込み専用メソッドで、もう一つは追加の書き込み固有のメソッドである.関数、関数、関数
別の観点から見てみましょう.我々が起動するとき、何が起こりますか
List()
例えば?起動List()
驚いたことにすぐにオブジェクトを開始しません.@SinceKotlin("1.1")
@kotlin.internal.InlineOnly
public inline fun <T> List(size: Int, init: (index: Int) -> T): List<T> = MutableList(size, init)
上記のスニペットから見るとList()
私たちは実際にはList
, 上で見たインターフェイスですが、実際には別の関数を呼び出します.@SinceKotlin("1.1")
@kotlin.internal.InlineOnly
public inline fun <T> MutableList(size: Int, init: (index: Int) -> T): MutableList<T> {
val list = ArrayList<T>(size)
repeat(size) { index -> list.add(init(index)) }
return list
}
MutableList()
新規作成ArrayList
, 適切な値で初期化してから戻ります.帰るとArrayList
に変換されるMutableList
. 私たちは明らかに、なぜKollinのドキュメントで、リストのデフォルトの実装がArrayList
.あなたの中の好奇心のために.
ArrayList
は、java.util.ArrayList
:@SinceKotlin("1.1") public actual typealias ArrayList<E> = java.util.ArrayList<E>
我々が行くならば、何を調べますかjava.util.ArrayList
実際に…それは拡張することが判明java.util.function.Consumer.AbstractList
と実装java.util.List
. ここでいくつかの接続を見始めています!混合界面と機能
だから本質的には
List
and MutableList
つの別のものを一度にすることができます:List
読み取り専用プロパティとMutableList
書き込み操作を行う.ArrayList
実際の実装.listOf
and mutableListOf
. これらは何ですか.の1つでスニークピークを取りましょう
listOf
機能/**
* Returns a new read-only list of given elements. The returned list is serializable (JVM).
* @sample samples.collections.Collections.Lists.readOnlyList
*/
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()
私たちはvararg
が配列listOf
基本的に配列の要素をリストに変換するList
インターフェイス.mutableListOf
少し異なっていますが、本質的には同じです./**
* Returns a new [MutableList] with the given elements.
* @sample samples.collections.Collections.Lists.mutableList
*/
public fun <T> mutableListOf(vararg elements: T): MutableList<T> =
if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
上記の両方の場合、関数はArrayList
しかし、これらは異なるインターフェースを返すList
読み取り専用操作のみを提供します.MutableList
書き込み操作も提供します.多分、私はKotlinのソースコードへの掘削の量を誇張したかもしれません
List
and MutableList
Kotlinの作品のいくつかの内部の魔法はまだ謎のビットかもしれないが、この探査で明確になった.Reference
この問題について(Kotlinにおけるリストとmutablelistの違いの理解), 我々は、より多くの情報をここで見つけました https://dev.to/caramelomartins/understanding-differences-between-list-and-mutablelist-in-kotlin-o16テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol