programing

Kotlin 목록과 배열 유형의 차이

jooyons 2023. 4. 20. 21:13
반응형

Kotlin 목록과 배열 유형의 차이

와의 차이는 무엇입니까?List그리고.Array종류?
같은 조작(루프, 필터식 등)을 할 수 있는 것 같습니다만, 동작이나 사용법에 차이가 있습니까?

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

for (name in names1)
    println(name)
for (name in names2)
    println(name)

어레이와 리스트(및 그 서브타입)에는 많은 차이가 있습니다.다음은 가장 중요한 것을 나타냅니다.

  • Array<T>는 이미 구현되어 있는 클래스입니다.이 클래스는 항목을 저장하는 순차적인 고정 크기 메모리 영역입니다(JVM에서는 Java 어레이로 표시됩니다).

    List<T>그리고.MutableList<T>는, 실장이 다른 인터페이스입니다.ArrayList<T>,LinkedList<T>기타. 리스트의 메모리 표현 및 조작 로직은 구체적인 구현에서 정의된다.예를 들어, 예를 들어, 예를 들어, 의 색인화LinkedList<T>링크를 통과하여 O(n) 시간이 걸리는 반면,ArrayList<T>는 동적으로 할당된 배열에 해당 항목을 저장합니다.

    val list1: List<Int> = LinkedList<Int>()
    val list2: List<Int> = ArrayList<Int>()
    
  • Array<T>(임의의 참조를 통해서 변경할 수 있습니다)는,List<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>(에 불변합니다).Array<Int>아니다Array<Number>)의 경우도 마찬가지입니다.MutableList<T>,그렇지만List<T>공변량(List<Int>List<Number>).

    val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
    val l: List<Number> = listOf(1, 2, 3) // OK
    
  • 어레이는 기본 요소에 맞게 최적화되어 있습니다.별도 있습니다.IntArray,DoubleArray,CharArray자바 프리미티브 어레이에 매핑되어 있는 등(int[],double[],char[]), 박스가 아닌 것(Array<Int>Java에 매핑되어 있습니다.Integer[]목록에는 일반적으로 프리미티브에 최적화된 구현이 없지만 일부 라이브러리(JDK 외부)는 프리미티브에 최적화된 목록을 제공합니다.

  • List<T>그리고.MutableList<T>매핑된 유형이며 Java 상호운용성(Java's)에서 특별한 동작을 합니다.List<T>코틀린으로부터는, 다음의 어느 쪽인가 하면List<T>또는MutableList<T>어레이도 매핑되지만 Java의 다른 상호운용성 규칙이 있습니다.

  • 특정 어레이 유형은 주석에서 사용됩니다(기본 어레이,Array<String>, 및 어레이:enum class항목) 및 주석에는 특별한 배열 리터럴 구문이 있습니다.목록 및 기타 컬렉션은 주석에서 사용할 수 없습니다.

  • 사용법에 대해서는 코드의 퍼포먼스가 중요한 부분을 제외하고 모든 장소의 어레이보다 리스트를 사용하는 것이 좋습니다.이유는 Java와 동일합니다.

용도측과 크게 다른 점은 어레이의 사이즈는 고정되어 있지만 사이즈는 동적으로 조정할 수 있다는 입니다.게다가.Array「 가능」한 것에 비해, 「변환 가능」List렇지않않 않않않다다

게다가 다른 인터페이스들 사이에서 구현된 인터페이스입니다.java.util.ArrayList됩니다.kotlin.collections.MutableList항목을 수정할 수 있는 컬렉션이 필요할 때 사용합니다.

에서는 jvm이 .Array는 어레이로 표시됩니다. List한편 Java에서는 불변의 컬렉션에 상당하는 것이 없기 때문에 로 표시됩니다.

상기 외에 아이덴티티 비교도 마찬가지입니다.

val l1 = listOf("a")
val l2 = listOf("a")
var x = (l1 == l2) // => true

val a1 = arrayOf("a")
val a2 = arrayOf("a")
var y = (a1 == a2) // => false

언급URL : https://stackoverflow.com/questions/36262305/difference-between-list-and-array-types-in-kotlin

반응형