답변:
배열 및 목록 ( List<T>
및 해당 하위 유형으로 표시 MutableList<T>
)에는 많은 차이점이 있습니다. 가장 중요한 것은 다음과 같습니다.
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>
수정 메소드가 없습니다 ( 읽기 전용보기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
배열의 크기는 고정되어 있으며 동일성을 유지하여 확장하거나 축소 할 수 없습니다 (크기를 조정하려면 배열을 복사해야합니다). 목록에 관해서는, 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>
인 에 불변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>
자바의 매핑됩니다 Integer[]
). JDK 외부의 일부 라이브러리는 기본적으로 최적화 된 목록을 제공하지만 일반적으로 목록에는 기본에 최적화 된 구현이 없습니다.
List<T>
및 MutableList<T>
되는 유형의 매핑 및 자바 상호 운용성 특별 행동 (자바는이 List<T>
같은 중 코 틀린에서 볼 수 List<T>
또는 MutableList<T>
). 배열도 매핑되지만 다른 Java 상호 운용성 규칙 이 있습니다.
특정 배열 유형에 사용되는 주석 (원시적 배열, Array<String>
와,와 배열 enum class
항목), 및 특별 거기 주석의 배열 리터럴 구문 . 목록 및 기타 컬렉션은 주석에 사용할 수 없습니다.
사용법에 관해서는 코드의 성능에 중요한 부분을 제외하고 모든 곳에서 배열보다 목록을 사용하는 것이 좋습니다. 추론은 Java의 경우와 동일합니다 .
사용 측면과의 주요 차이점은 배열의 크기가 고정되어 (Mutable)List
있고 크기를 동적으로 조정할 수 있다는 것입니다. 또한 Array
변경 List
이 불가능 하지만 그렇지 않습니다.
또한 kotlin.collections.List
에 의해 구현 된 인터페이스 java.util.ArrayList
입니다. 또한 kotlin.collections.MutableList
아이템 수정이 가능한 컬렉션이 필요할 때 사용되도록 확장되었습니다 .
jvm 레벨 Array
에서는 배열 로 표시됩니다 . List
반면 java.util.List
에 Java에서는 사용할 수있는 불변 콜렉션이 없기 때문에 로 표시됩니다 .
val intArray = arrayOf(1,2,3); intArray[0] = 2
되지 않지만 컴파일 되지는 않습니다 val intList = listOf(1,2,3); intList[0] = 2
. 은 List
참으로 고정 된 크기를 가지고 있지만 MutableList
그것 때문에 그것은이 가능성이없는 확장하는 val a:List<Int>
다른보고 size
후속 호출합니다.
List
또는 사용하는 것이 좋습니다 ArrayList
?
List
(어쩌면 99 %의 경우). 구현 사용 ArrayList
또는 LinkedList
다른 구체적인 구현에 관심이있는 경우
Array
있습니까? 의 요소와 동일합니다List
. 크기List
도 고정되어 있습니다.