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) // 4Array<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
'programing' 카테고리의 다른 글
| Http Context가 되는 이유대기 후 현재 null입니까? (0) | 2023.04.20 |
|---|---|
| C# / WPF에서 애니메이션을 중지하는 방법 (0) | 2023.04.20 |
| 열에 대한 이유가 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 선택 목록에 유효하지 않습니다. (0) | 2023.04.20 |
| Bash에서 여러 줄 문자열을 출력하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
| 상호 또는 순환(순환) 가져오기를 사용하면 어떻게 됩니까? (0) | 2023.04.20 |