Kotlinのリスト型と配列型の違い

ダニエル・ハリ:

ListArrayタイプの違いは何ですか?
それらと同じ操作を行うことができるようです(ループ、フィルター式など)、動作や使用法に違いはありますか?

val names1 = listOf("Joe","Ben","Thomas")
val names2 = arrayOf("Joe","Ben","Thomas")

for (name in names1)
    println(name)
for (name in names2)
    println(name)
ホットキー:

配列とリスト(List<T>とそのサブタイプによって表されるMutableList<T>)には多くの違いがあります。最も重要なものを次に示します。

  • Array<T>既知の実装を持つクラスです。これは、アイテムを格納する順次固定サイズのメモリ領域です(JVMでは、Java配列によって表されます)。

    List<T>MutableList<T>ArrayList<T>実装が異なるインターフェースLinkedList<T>です。リストのメモリ表現と操作ロジックは、具体的な実装で定義されます。たとえば、aのインデックス付けLinkedList<T>はリンクを通過し、O(n)時間かかりArrayList<T>ますが、動的に割り当てられた配列にアイテムを格納します。

    val list1: List<Int> = LinkedList<Int>()
    val list2: List<Int> = ArrayList<Int>()
    
  • Array<T>変更可能です(参照によって変更できます)が、List<T>変更メソッドはありません(読み取り専用ビューMutableList<T>または不変リスト実装のいずれかです)。

    val a = arrayOf(1, 2, 3)
    a[0] = a[1] // OK
    
    val l = listOf(1, 2, 3)
    l[0] = l[1] // doesn't compile
    
    val m = mutableListOf(1, 2, 3)
    m[0] = m[1] // OK
    
  • 配列のサイズは固定されており、IDを保持して拡大または縮小することはできません(サイズを変更するには、配列をコピーする必要があります)。リストについてMutableList<T>add、とremoveがあり、サイズを増減できます。

    val a = arrayOf(1, 2, 3)
    println(a.size) // will always be 3 for this array
    
    val l = mutableListOf(1, 2, 3)
    l.add(4)
    println(l.size) // 4
    
  • Array<T>に対して不変ですTArray<Int>isではありませんArray<Number>)と同じですがMutableList<T>List<T>共変です(List<Int>is List<Number>)。

    val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
    val l: List<Number> = listOf(1, 2, 3) // OK
    
  • アレイは、プリミティブのために最適化されていますが分離されIntArrayDoubleArrayCharArrayJavaプリミティブアレイにマッピングされる等(int[]double[]char[])、しない箱入りものは(Array<Int>JavaのにマッピングされますInteger[])。一般的にリストには、プリミティブ用に最適化された実装はありませんが、一部のライブラリ(JDK以外)は、プリミティブ用に最適化されたリストを提供しています。

  • List<T>およびMutableList<T>マップされたタイプであり、Javaの相互運用性で特別な動作をします(Java List<T>はKotlinからList<T>またはのどちらかと見なされますMutableList<T>)。配列もマッピングされますが、配列にはJavaの相互運用性に関する他の規則があります。

  • 特定の配列タイプが注釈で使用され(プリミティブ配列、、Array<String>およびenum classエントリを持つ配列)、注釈には特別な配列リテラル構文がありますリストおよびその他のコレクションは、注釈では使用できません。

  • 使用方法に関しては、コードのパフォーマンスが重要な部分を除いて、すべての場所で配列よりもリストを使用することをお勧めします理由はJavaの場合と同じです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

配列型定義と型内配列定義の違い

分類Dev

列挙型と列挙型の違い

分類Dev

Kotlinの配列型とクラスリテラル

分類Dev

参照型としてのリストとArrayListの違いは?

分類Dev

リストと配列の違い

分類Dev

CとC ++の列挙型ストレージの違い

分類Dev

関数の配列の型の `fn`と` || `の違い

分類Dev

TSの文字列列挙型と文字列リテラル型の違い

分類Dev

配列とリストのデータ型?

分類Dev

Kotlinのジェネリック型としての配列

分類Dev

Kotlinのnullabe型とnull不可型の違いは何ですか

分類Dev

型消去されたリストをKotlinの配列に変換する方法は?

分類Dev

型消去されたリストをKotlinの配列に変換する方法は?

分類Dev

Typescriptの列挙型と定数の違い

分類Dev

リストを文字列配列に変換するときの互換性のない型

分類Dev

C#辞書のキー/値配列/リストと互換性のない列挙可能な型

分類Dev

Scalaでの配列とリストの初期化の違い

分類Dev

bashスクリプトの ""と()の配列の違いは?

分類Dev

Javaでの型リストと型ArrayList

分類Dev

Kotlinでのリストの列挙型の解析

分類Dev

ジェネリックコレクションと特定のデータ型の配列の違い

分類Dev

配列リストの容量と配列のサイズの違い

分類Dev

Scalaの::型とNil型の違い

分類Dev

QueryBuilderとDoctrine配列型の使い方は?

分類Dev

C型とC ++型の違い(typedef)

分類Dev

deque循環配列とリスト実装の違い

分類Dev

リストと配列(np)の違いは?

分類Dev

Kotlin:ジェネリック、リフレクション、T型とT型の違い:任意

分類Dev

OCaml型キャストの違い

Related 関連記事

  1. 1

    配列型定義と型内配列定義の違い

  2. 2

    列挙型と列挙型の違い

  3. 3

    Kotlinの配列型とクラスリテラル

  4. 4

    参照型としてのリストとArrayListの違いは?

  5. 5

    リストと配列の違い

  6. 6

    CとC ++の列挙型ストレージの違い

  7. 7

    関数の配列の型の `fn`と` || `の違い

  8. 8

    TSの文字列列挙型と文字列リテラル型の違い

  9. 9

    配列とリストのデータ型?

  10. 10

    Kotlinのジェネリック型としての配列

  11. 11

    Kotlinのnullabe型とnull不可型の違いは何ですか

  12. 12

    型消去されたリストをKotlinの配列に変換する方法は?

  13. 13

    型消去されたリストをKotlinの配列に変換する方法は?

  14. 14

    Typescriptの列挙型と定数の違い

  15. 15

    リストを文字列配列に変換するときの互換性のない型

  16. 16

    C#辞書のキー/値配列/リストと互換性のない列挙可能な型

  17. 17

    Scalaでの配列とリストの初期化の違い

  18. 18

    bashスクリプトの ""と()の配列の違いは?

  19. 19

    Javaでの型リストと型ArrayList

  20. 20

    Kotlinでのリストの列挙型の解析

  21. 21

    ジェネリックコレクションと特定のデータ型の配列の違い

  22. 22

    配列リストの容量と配列のサイズの違い

  23. 23

    Scalaの::型とNil型の違い

  24. 24

    QueryBuilderとDoctrine配列型の使い方は?

  25. 25

    C型とC ++型の違い(typedef)

  26. 26

    deque循環配列とリスト実装の違い

  27. 27

    リストと配列(np)の違いは?

  28. 28

    Kotlin:ジェネリック、リフレクション、T型とT型の違い:任意

  29. 29

    OCaml型キャストの違い

ホットタグ

アーカイブ